They are essentially the same but using
provides alias templates
which is quite useful. One good example I could find is as follows:
namespace std {
template<typename T> using add_const_t = typename add_const<T>::type;
}
So, we can use std::add_const_t<T>
instead of typename std::add_const<T>::type