Syntax für universelle Referenzen

Dies ist eine rWert-Referenz:

void foo(int&& a);

Es ist nicht an lvalues ​​gebunden:

int i = 42;
foo(i);   // error

Dies ist eine universelle Referenz:

template<typename T>
void bar(T&& b);

Es bindet sich an rWerte und es bindet sich auch an lWerte:

bar(i);   // okay

Dies ist eine rWert-Referenz:

template<typename T>
struct X
{
    void baz(T&& c);
};

Es ist nicht an lvalues ​​gebunden:

X<int> x;
x.baz(i);   // error

Warum verwenden universelle Referenzen dieselbe Syntax wie rvalue-Referenzen? Ist das nicht eine unnötige Quelle der Verwirrung? Hat das Komitee schon mal über alternative Syntaxen nachgedacht?T&&&, T&*, T@ oderT&42 (nur ein Scherz über den letzten)? Wenn ja, aus welchen Gründen wurden alternative Syntaxen abgelehnt?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage