§3.10 sekcja 9 mówi, że "wartości nieklasowe zawsze mają typy bez cv". To sprawiło, że zastanawiam ...wartości nieklasyczne zawsze mają typy niekwalifikujące się do 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"
}
Zgodnie z normą, nie ma czegoś takiego jak const rvalue dla typów non-klasowych, jeszcze bar()
woli wiążą się const int&&
. Czy jest to błąd kompilatora?
EDIT: Najwyraźniej this
również const RValue :)
EDIT: Ten problem wydaje się być rozwiązany w g ++ 4.5.0, obie linie print "rvalue" teraz.
wow, doskonałe pytanie. Chciałbym móc głosować dwa razy. –
Gdybym mógł, dałbym 100 punktów za odpowiedź. – Omnifarious
Którego kompilatora używasz? g ++ 4.3.2 narzekał, że nie jest w stanie przeciążyć funkcji pass_int przy użyciu wariantu const. – rajeshnair