typedef is necessary for many template metaprogramming tasks — whenever a class is treated as a “compile-time type function”, a typedef is used as a “compile-time type value” to obtain the resulting type. … Note that template metaprogramming is not commonly used outside of library development.
Read more