If given a pointer, returns the type being pointed to. If given a non-pointer type, simply returns the input.
typedef typename remove_pointer<T>::type pointed_to_type;
typedef typename remove_pointer<const int*volatile*const>::type IntPtr; typedef typename remove_pointer<IntPtr>::type Int; IntPtr will have type type const int*volatile. Int will have the type const int.