foo&& r = foo(); rはlvalue reference?
以下のコード
#include <iostream>
class foo
{
};
void f(foo&& r)
{
std::cout << "rvalue ref" << std::endl;
}
void f(foo& r)
{
std::cout << "lvalue ref" << std::endl;
}
int main()
{
foo&& r = foo();
std::cout << "foo() is ";
f(foo());
std::cout << "r is ";
f(r);
return 0;
}
において出力結果は
foo() is rvalue ref
r is lvalue ref
となりました。
foo() is rvalue ref
は理解できますが
r is lvalue ref
となるのは驚きでした。
r は foo&& すなわちfooへのrvalue referenceのはずですから
f(r)はf(foo&& r)にオーバーロード解決されるであろうと予測していたからです。
しかし、f(foo& r)にオーバーロード解決されているということは
r は lvalue referenceということでしょうか?