I'm confusing with rvalue reference,
is_rvalue_reference<decltype(a)>::value
indicates that the a
variable is rvalue reference,
but can't pass it to hello(int &&)
function.
#include <iostream>
#include <string>
#include <array>
using std::cout;
using std::endl;
using std::boolalpha;
using std::string;
using std::is_rvalue_reference;
using std::move;
void hello(int && z) {};
int main(void) {
int && a = 20;
// a is_xvalue: true
cout << "a is_xvalue: " << boolalpha << is_rvalue_reference<decltype(a)>::value << endl;
// error C2664:
// 'void hello(int &&)': cannot convert argument 1 from 'int' to 'int &&'
hello(a);
// compile ok.
hello(move(a));
return 0;
}