Sintaxe para referências universais
Esta é uma referência de valor:
void foo(int&& a);
Não liga a lvalues:
int i = 42;
foo(i); // error
Esta é uma referência universal:
template<typename T>
void bar(T&& b);
Ele se liga a valores de r e também se liga a lvalues:
bar(i); // okay
Esta é uma referência de valor:
template<typename T>
struct X
{
void baz(T&& c);
};
Não liga a lvalues:
X<int> x;
x.baz(i); // error
Por que as referências universais usam a mesma sintaxe que as referências de valor? Isso não é uma fonte desnecessária de confusão? O comitê já considerou sintaxes alternativas comoT&&&
, T&*
, T@
ouT&42
(brincando com esse último)? Se sim, quais foram as razões para rejeitar sintaxes alternativas?