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?

questionAnswers(2)

yourAnswerToTheQuestion