В контексте шаблона применяются следующие правила "сбрасывания ссылок":
template <typename T>
void foo(T && t)
{
//T& & -> T&
//T& && -> T&
//T&& & -> T&
//T&& && -> T&&
}
Почему язык запрещает "универсальные ссылки" от наличия квалификаторов const
?
template <typename T>
void foo(T const && t)
Казалось бы, имеет смысл, если тип разрешил ссылку (3 из 4 случаев).
Я уверен, что эта идея несовместима с каким-то другим аспектом дизайна языка, но я не вижу полной картины.