§3.10 la sezione 9 dice "i rvalues di non classe hanno sempre cv-tipi non qualificati". Che mi ha fatto chiedo ...i rvalues non di classe hanno sempre cv-tipi non qualificati
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 la norma, non v'è alcuna cosa come un rvalue const per i tipi non-classe, eppure bar()
preferisce legarsi a const int&&
. È un bug del compilatore?
EDIT: A quanto pare, this
è anche un rvalue const :)
EDIT: Questo problema sembra essere risolto in g ++ 4.5.0, entrambe le righe stampate "rvalue" ora.
wow, ottima domanda. Vorrei poter votare due volte. –
Se potessi offrire una taglia di 100 punti per la risposta. – Omnifarious
Quale compilatore stai usando? g ++ 4.3.2 si è lamentato di non essere in grado di sovraccaricare la funzione pass_int con una variante const. – rajeshnair