Ответ 1
Они имеют в виду одно и то же?
Универсальная ссылка была термином Скотт Майерс, придуманным, чтобы описать концепцию получения ссылки rvalue на неквалифицированный шаблонный параметр, который затем можно вывести как значение или ссылку на значение lvalue.
В то время, когда в стандарте С++ не было специального термина для этого, что было надзором в С++ 11 и затрудняет его обучение. Этот надзор был устранен N4164, в котором было добавлено следующее определение [temp.deduct]:
Ссылка на пересылку представляет собой ссылку rvalue на параметр cv-unqualified template. Если
P
является ссылкой для пересылки, а аргумент - значением l, тип "lvalue reference to A" используется вместо A для вывода типа.
Следовательно, эти два означают одно и то же, а текущий стандартный термин С++ пересылает ссылку. Сама бумага формулирует, почему "ссылка на пересылку" является лучшим термином, чем "универсальная ссылка".
Является ли это только ссылкой пересылки, если тело функции вызывает
std::forward
?
Нет, то, что вы делаете с ссылкой пересылки, не имеет значения для имени. Ссылка на пересылку концепции просто означает, что тип T
выводится в:
template <class T> void foo(T&& ); // <==
Его не нужно пересылать впоследствии.