Синтаксис для универсальных ссылок
Это ссылка на значение:
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
(шучу над последним)? Если да, то каковы причины отказа от альтернативных синтаксисов?