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

## Description

### 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

hana::integral_constant