Jako T.C. zauważyłem w komentarzach, że powodem tego NIE jest "akceptowanie tylko lwartości". const
odwołania wiążą się do wartości r po prostu dobrze.
Powodem jest to, że funkcje mogą być przeciążane na kategorię wartości parametru obiektu niejawnego tylko wtedy, gdy WSZYSTKIE przeciążenia określają kategorię wartości. Oznacza to, że po dodaniu przeciążenia z &&
, które dopasowuje tylko wartości r, nie będzie kompilacji, chyba że dodasz &
do istniejącego przeciążenia.
13,1, jest tu sformułowanie zasady:
deklaracje funkcji państwa o tej samej nazwie i tym samym parametr typu liście jak również deklaracji szablon funkcji członkowskich o tej samej nazwie, ta sama lista parametrów z parametrami i ta sama lista parametrów szablonu szablonu nie może być przeciążona, jeśli którykolwiek z nich, ale nie wszystkie, ma reflikat kwalifikacyjny .
i daje przykład
class Y
{
void h() &;
void h() const &; // OK
void h() &&; // OK, all declarations have a ref-qualifier
void i() &;
void i() const; // ill-formed, prior declaration of i
// has a ref-qualifier
};
To rzeczywiście kompiluje! Mind dmuchane>.
@NeilKirk Dlaczego by nie? –
@ T.C. Nigdy wcześniej nie widziałem tej składni. –