Ответ 1
Официальное название не является универсальной ссылкой, но ссылка для пересылки. Стандарт утверждает, что только ссылки rvalue на параметры шаблона cv-unqualified попадают в этот категория:
14.8.2.1 Вывод аргументов шаблона из вызова функции [temp.deduct.call]
3 Если P является классом с квалификацией cv, верхние уровни cv-квалификаторы типа Ps игнорируются для вывода типа. Если P является ссылочным типом, тип называемый P, используется для вычитания типа. Ссылка на пересылку ссылку rvalue на параметр cv-unqualified template. Если P является пересылка ссылки и аргумент является lvalue, тип "lvalue ссылка на A" используется вместо A для вывода типа. [Пример:
template <class T> int f(T&& heisenreference); template <class T> int g(const T&&); int i; int n1 = f(i); // calls f<int&>(int&) int n2 = f(0); // calls f<int>(int&&) int n3 = g(i); // error: would call g<int>(const int&&), which // would bind an rvalue reference to an lvalue
- конец примера]
Разрешить const T&&
вести себя как перенаправление ссылок, сделает невозможным перегрузку функции шаблона, которая принимает в качестве параметра только ссылку rvalue.
Обновить: как упоминает @HowardHinnant в комментариях, const T&&
действительно использует его (см. также этот Q & A).