Рассматривая документацию для 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&&>
?