以下は、質問を示すコードです。
class X {};
X x;
X&& rvalue_ref = std::move(x);
static_assert(std::is_same<decltype(rvalue_ref), X&&>::value, "Different types"); //To be sure that type is X&&
void func(X&) {
cout << "lvalue reference";
}
void func(X&&) {
cout << "rvalue reference";
}
int main() {
func(rvalue_ref);
}
出力:
lvalue reference
その理由を教えてください。X&& 型の変数とこの型のオーバーロードがありますが、このオーバーロードは呼び出されません。