Ответ 1
Обоснование дизайна для forward
подробно обсуждается в N2951.
В этом документе изложены 6 вариантов использования:
A. Следует переслать lvalue как lvalue. Все реализации проходят этот тест. Но это не классический идеальный образец пересылки. Цель этого теста - показать, что реализация 2 не соответствует своей заявленной цели - предотвратить все варианты использования, кроме идеальной пересылки.
Б. Следует переслать rvalue как rvalue. Как и в случае использования A, это преобразование идентичности, и это представляет собой мотивирующий пример, где необходимо преобразование идентичности.
C. Не следует пересылать значение как значение. Этот вариант использования демонстрирует опасную ситуацию случайного создания свисающей ссылки.
D. Следует пересылать менее квалифицированные по выражениям выражения к более квалифицированным по выражениям. Мотивирующий вариант использования, включающий добавление const во время форварда.
E. Следует пересылать выражения производного типа в доступный, однозначный базовый тип. Мотивирующий вариант использования, включающий пересылку производного типа в базовый тип.
F. Не следует пересылать произвольные преобразования типов. Этот вариант использования демонстрирует, как произвольные преобразования в форварде приводят к висящим ссылочным ошибкам времени выполнения.
Вторая перегрузка включает случаи B и C.
В статье приводятся примеры каждого варианта использования, которые слишком длинны, чтобы повторяться здесь.
Обновить
Я только что выполнил "решение" только первой перегрузки через эти 6 вариантов использования, и это упражнение показывает, что вторая перегрузка также позволяет использовать вариант F: не следует пересылать произвольные преобразования типов.