20 General utilities library [utilities]

20.10 Metaprogramming and type traits [meta]

20.10.3 Helper classes [meta.help]

namespace std {
  template <class T, T v>
  struct integral_constant {
    static constexpr T value = v;
    typedef T value_type;
    typedef integral_constant<T,v> type;
    constexpr operator value_type() const noexcept { return value; }
    constexpr value_type operator()() const noexcept { return value; }
  };
  typedef integral_constant<bool, true> true_type;
  typedef integral_constant<bool, false> false_type;
}

The class template integral_constant and its associated typedefs true_type and false_type are used as base classes to define the interface for various type traits.