Looking at the definition of std::forward, I found this implementation which does not appear to make sense. It is said that it forwards the argument as an lvalue or an rvalue. How can that be since the return type is an rvalue reference?
1 2 3 4 5
template <class _Ty>
constexpr _Ty&& forward( remove_reference_t<_Ty>& _Arg) noexcept
{ // forward an lvalue as either an lvalue or an rvalue
returnstatic_cast<_Ty&&>(_Arg);
}