is_same<A, B>::value true if A and B are the same type. is_base_and_derived<A, B>::value true if A is a base class of B, or if A and B are the same class. is_convertible<A, B>::value true if there is an implicit conversion from type A to type B. is_arithmetic<A>::value true if A is an integral or floating-point type.