Składnia dla odniesień uniwersalnych

To jest referencja rvalue:

void foo(int&& a);

Nie wiąże się z lwartościami:

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

To jest uniwersalne odniesienie:

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

Wiąże się z wartościami rval, a także wiąże się z wartościami:

bar(i);   // okay

To jest referencja rvalue:

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

Nie wiąże się z lwartościami:

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

Dlaczego odniesienia uniwersalne używają tej samej składni, co odwołania do wartości? Czy to nie jest niepotrzebne źródło zamieszania? Czy komisja kiedykolwiek rozważała takie alternatywne składnieT&&&, T&*, T@ lubT&42 (tylko żartuję z tego ostatniego)? Jeśli tak, jakie były przyczyny odrzucenia alternatywnych składni?

questionAnswers(2)

yourAnswerToTheQuestion