<type_traits>

class template
<type_traits>

std::integral_constant

template <class T, T v>struct integral_constant;
Integral constant
This template is designed to provide compile-time constants as types.

It is used by several parts of the standard library as the base class for trait types, especially in their bool variant: see true_type and false_type.

Its definition in the Standard Library has the same behavior as:
1
2
3
4
5
6
7
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 T() { return v; }
};
1
2
3
4
5
6
7
8
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 T() const noexcept { return v; }
  constexpr T operator()() const noexcept { return v; }
};

Template parameters

T
Type of the integral constant.
Aliased as member type integral_constant::value_type.
v
Value of the integral constant.
Accessible as member integral_constant::value, or through type casting.

Member types

member typedefinition
value_typeThe type of the constant (template parameter T)
typeThe integral_constant type itself

Member functions


Instantiations


Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// factorial as an integral_constant
#include <iostream>
#include <type_traits>

template <unsigned n>
struct factorial : std::integral_constant<int,n * factorial<n-1>::value> {};

template <>
struct factorial<0> : std::integral_constant<int,1> {};

int main() {
  std::cout << factorial<5>::value;  // constexpr (no calculations on runtime)
  return 0;
}

Output:
120


See also