[Assorted-commits] SF.net SVN: assorted:[1274] sandbox/trunk/src/cc/forward.cc
Brought to you by:
yangzhang
From: <yan...@us...> - 2009-03-09 22:55:54
|
Revision: 1274 http://assorted.svn.sourceforge.net/assorted/?rev=1274&view=rev Author: yangzhang Date: 2009-03-09 22:55:47 +0000 (Mon, 09 Mar 2009) Log Message: ----------- added demo of forwarding Added Paths: ----------- sandbox/trunk/src/cc/forward.cc Added: sandbox/trunk/src/cc/forward.cc =================================================================== --- sandbox/trunk/src/cc/forward.cc (rev 0) +++ sandbox/trunk/src/cc/forward.cc 2009-03-09 22:55:47 UTC (rev 1274) @@ -0,0 +1,36 @@ +// Based on the examples given in this (excellent) blog post: +// +// <http://blogs.msdn.com/vcblog/archive/2009/02/03/rvalue-references-c-0x-features-in-vc10-part-2.aspx> + +#include <iostream> +#include <string> +#include <utility> +using namespace std; + +#define mkinner(type) void inner(type x) { cout << #type ": " << x << endl; } +mkinner(string &) +mkinner(const string &) +mkinner(string &&) +mkinner(const string &&) + +template<typename T> void outer(T &&x) { inner(forward<T>(x)); } + +string rvalue() { return "rvalue"; } +const string crvalue() { return "const rvalue"; } +string lvalue("lvalue"); +const string clvalue("const lvalue"); + +int main() { + outer(lvalue); + outer(clvalue); + outer(rvalue()); + outer(crvalue()); + return 0; +} + +// Output: +// +// string &: lvalue +// string &: const lvalue +// string &&: rvalue +// const string &&: const rvalue This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |