Синтаксис для универсальных ссылок

Это ссылка на значение:

void foo(int&& a);

Это не связывает с lvalues:

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

Это универсальная ссылка:

template
void bar(T&& b);

Он связывается с rvalues, а также с lvalues:

bar(i);   // okay

Это ссылка на значение:

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

Это не связывает с lvalues:

X x;
x.baz(i);   // error

Почему универсальные ссылки используют тот же синтаксис, что и ссылки rvalue? Isn»Т это ненужный источник путаницы? Комитет когда-нибудь рассматривал альтернативные синтаксисы, такие как,T&&&T&*T@ или жеT&42 (шучу над последним)? Если да, то каковы причины отказа от альтернативных синтаксисов?

Ответы на вопрос(2)

Ваш ответ на вопрос