§3.10 La section 9 stipule que "les valeurs de non-classe ont toujours des types cv-non-qualifiés". Cela m'a fait me demande ...Les valeurs de non-classe ont toujours des types non-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"
}
Selon la norme, il n'y a pas une telle chose comme const rvalue pour les types non-classe, mais préfère bar()
se lier à const int&&
. Est-ce un bug de compilateur?
EDIT: Apparemment, this
est aussi un const rvalue :)
EDIT: Cette question semble être fixé en g ++ 4.5.0, les deux lignes impriment "rvalue" maintenant.
wow, excellente question. J'aimerais pouvoir voter deux fois. –
Si je pouvais offrir une prime de 100 points pour la réponse. – Omnifarious
Quel compilateur utilisez-vous? g ++ 4.3.2 se plaignait de ne pas pouvoir surcharger la fonction pass_int avec une variante const. – rajeshnair