Здесь creator() возвращает указатель на X, который я разыскиваю и перехожу к foo. Поскольку это rvalue, следует использовать семантику перемещения, правильно? Но когда я запускаю его, я нахожу, что вызывается foo (X &).C++: почему foo (X &) вызывается вместо foo (X &&)?
#include <iostream>
using namespace std;
struct X {
int i;
};
void foo(X& x) {
cout << "foo(X&)" << endl;
}
void foo(X&& x) {
cout << "foo(X&&)" << endl;
}
struct X* creator() {
return new X {5};
}
main() {
X x{5};
foo(*creator()); // prints foo(X&)
}
http://en.cppreference.com/w/cpp/language/operator_member_access#Built-in_indirection_operator – chris