1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| // forward example #include <utility> // std::forward #include <iostream> // std::cout // function with lvalue and rvalue reference overloads: void overloaded (const int& x) {std::cout << "[lvalue]";} void overloaded (int&& x) {std::cout << "[rvalue]";} // function template taking rvalue reference to deduced type: template <class T> void fn (T&& x) { overloaded (x); // always an lvalue overloaded (std::forward<T>(x)); // rvalue if argument is rvalue } int main () { int a; std::cout << "calling fn with lvalue: "; fn (a); std::cout << '\n'; std::cout << "calling fn with rvalue: "; fn (0); std::cout << '\n'; return 0; }
|