Продвижение <t> так же, как вперед <T&&> ?
Рассматривая документацию для std::forward
,
template< class T >
constexpr T&& forward( typename std::remove_reference<T>::type& t ) noexcept;
template< class T >
constexpr T&& forward( typename std::remove_reference<T>::type&& t ) noexcept;
Обе функции возвращают T&&
, которые (поправьте меня, если я ошибаюсь) обрушиваются на
-
T&
если T
является ссылкой на lvalue -
T&&
если T
является ссылкой rvalue, или если T
не является ссылкой
Для произвольного типа T
который может быть ссылкой, действительно ли обращение коллапса всегда приводит к тому, что forward<T>
выполняет то же самое, что и forward<T&&>
?
Если да, то есть ли какая-либо причина использовать forward<T&&>
?
Ответы
Ответ 1
Свертывание ссылок всегда приводит к тому, что forward<T>
выполняет то же самое, что и forward<T&&>
?
Да.
[Я] Есть ли какая-нибудь причина использовать forward<T&&>
?
Нет.
Заметим, что это предполагает, что только forward
с точки зрения являются два перегруженных вы показали в std::
.