As per the documentation(https://en.cppreference.com/w/cpp/utility/move), there are two kinds of constructors for std::move<T>, which are posted below.
What are the differences between these constructors? What confused me most is that why there needs the keyword(typename) in the second constructor.
I am a novice in C++. I would be thankful for any hint on this question.
template< class T > typename std::remove_reference<T>::type&& move( T&& t ) noexcept; (since C++11)(until C++14) template< class T > constexpr typename std::remove_reference<T>::type&& move( T&& t ) noexcept; (since C++14)