1 template <class T, T v> 2 struct integral_constant { 3 static constexpr T value = v; 4 typedef T value_type; 5 typedef integral_constant type; // using injected-class-name value_typeintegral_constant6 constexpr operator value_type() const noexcept { return value; } 7 }; 8 9 using false_type = integral_constant<bool, false>; 10 using true_type = integral_constant<bool, true>; 11 12 template <class T, class U> 13 struct is_same : false_type {}; 14 15 template <class T> 16 struct is_same<T, T> : true_type {}; 17