namespace std {template<class T, T v>structintegral_constant{staticconstexpr T value = v;
using value_type = T;
using type = integral_constant<T, v>;
constexproperator value_type()constnoexcept{return value; }constexpr value_type operator()()constnoexcept{return value; }};
}
The class template integral_constant,
alias template bool_constant, and
its associated typedef-namestrue_type and false_type
are used as base classes to define
the interface for various type traits.