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