// // 3.6.perfect.forward.cpp // modern c++ tutorial // // created by changkun at changkun.de // https://github.com/changkun/modern-cpp-tutorial // #include #include void reference(int& v) { std::cout << "lvalue reference" << std::endl; } void reference(int&& v) { std::cout << "rvalue reference" << std::endl; } template void pass(T&& v) { std::cout << " normal param passing: "; reference(v); std::cout << " std::move param passing: "; reference(std::move(v)); std::cout << " std::forward param passing: "; reference(std::forward(v)); std::cout << "static_cast param passing: "; reference(static_cast(v)); } int main() { std::cout << "rvalue pass:" << std::endl; pass(1); std::cout << "lvalue pass:" << std::endl; int l = 1; pass(l); return 0; }