Basic example:
template<typename T> using pointer = T*;
This definition makes pointer<T>
an alias of T*
. For example:
pointer<int> p = new int; // equivalent to: int* p = new int;
Alias templates cannot be specialized. However, that functionality can be obtained indirectly by having them refer to a nested type in a struct:
template<typename T>
struct nonconst_pointer_helper { typedef T* type; };
template<typename T>
struct nonconst_pointer_helper<T const> { typedef T* type; };
template<typename T> using nonconst_pointer = nonconst_pointer_helper<T>::type;