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