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?