i rvalues ​​non di class hanno sempre i tipi cv-non qualificati

§3.10 la sezione 9 dice che “i rvalues ​​non di class hanno sempre cv-tipi non qualificati”. Questo mi ha fatto chiedere …

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" } 

Secondo lo standard, non esiste un valore const per i tipi non di class, tuttavia bar() preferisce associare a const int&& . È un bug del compilatore?

EDIT: Apparentemente, anche this è un valore costante 🙂

EDIT: Questo problema sembra essere risolto in g ++ 4.5.0, entrambe le linee stampano “rvalue” ora.