§3.10 セクション 9 は、「非クラスの右辺値には常に cv 修飾されていない型がある」と述べています。それは私を驚かせました...
int foo()
{
return 5;
}
const int bar()
{
return 5;
}
void pass_int(int&& i)
{
std::cout << "rvalue\n";
}
void pass_int(const int&& i)
{
std::cout << "const rvalue\n";
}
int main()
{
pass_int(foo()); // prints "rvalue"
pass_int(bar()); // prints "const rvalue"
}
標準によると、非クラス型の const 右辺値などはありませんbar()
が、 にバインドすることを好みconst int&&
ます。これはコンパイラのバグですか?
EDIT:どうやら、this
const rvalueでもあります:)
編集: この問題は g++ 4.5.0 で修正されたようです。両方の行で "rvalue" が出力されるようになりました。