23 General utilities library [utilities]

23.15 Metaprogramming and type traits [meta]

23.15.3 Helper classes [meta.help]

namespace std {
  template <class T, T v>
  struct integral_constant {
    static constexpr T value = v;
    using value_type = T;
    using type       = integral_constant<T, v>;
    constexpr operator value_type() const noexcept { return value; }
    constexpr value_type operator()() const noexcept { return value; }
  };
}

Шаблон класса integral_­constant, шаблон псевдонима bool_­constant, и связанный с ним typedef-names true_­type и false_­type используются в качестве базовых классов для определения интерфейса для различных признаков типа.