В разделе 9.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"
}
В соответствии со стандартом, нет такой вещи, как константа rvalue для неклассических типов, но bar()
предпочитает привязываться к const int&&
. Является ли это ошибкой компилятора?
EDIT: По-видимому, this
также является константой:)
EDIT: эта проблема, похоже, исправлена в g++ 4.5.0, обе строки печатают "rvalue" сейчас.