Boost.Hana  1.6.0
Your standard library for metaprogramming
boost::hana::IntegralConstant< C > Struct Template Reference


template<typename C>
struct boost::hana::IntegralConstant< C >

The IntegralConstant concept represents compile-time integral values.

The IntegralConstant concept represents objects that hold a constexpr value of an integral type. In other words, it describes the essential functionality provided by std::integral_constant. An IntegralConstant is also just a special kind of Constant whose inner value is of an integral type.

Minimal complete definition

The requirements for being an IntegralConstant are quite simple. First, an IntegralConstant C must be a Constant such that Tag::value_type is an integral type, where Tag is the tag of C.

Secondly, C must have a nested static constexpr member named value, such that the following code is valid:

constexpr auto v = C::value;

Because of the requirement that Tag::value_type be an integral type, it follows that C::value must be an integral value.

Finally, it is necessary to specialize the IntegralConstant template in the boost::hana namespace to tell Hana that a type is a model of IntegralConstant:

namespace boost { namespace hana {
template <>
struct IntegralConstant<your_custom_tag> {
static constexpr bool value = true;

Refined concept

  1. Constant (free implementation of value)
    The value function required to be a Constant can be implemented as follows for IntegralConstants:
    value<C>() == C::value
    The to function must still be provided explicitly for the model of Constant to be complete.

Concrete models