#include #include #include using namespace std ; template typename remove_reference::type&& move_mine(T&& param) noexcept { return static_cast::type&&>(param); } void f1( int x1 ) { cout << "void f1( int x1 )" << endl ; } void f1( float x1 ) { cout << "void f1( float x1 )" << endl ; } float convertIntToFloat( int a1 ) { return float(a1) ; } void f2( int& x1 ) { cout << "void f2( int& x1 )" << endl ; } void f2( int&& x1 ) { cout << "void f2( int&& x1 )" << endl ; } int main() { int x1 = 10 ; int& ref_x1 = x1 ; f1( x1 ) ; f1 ( convertIntToFloat(x1 ) ) ; f2( x1 ) ; f2( move_mine( x1 ) ) ; return 0; }