This struct can be used to tell if two types are the same type or not.
bool b = is_same<T, U>::value;
bool b = is_same<const int, int>::value; The resulting value is false. int and const int are two distinct types.