Type traits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Compile-time rational arithmetic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Compile-time integer sequences | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(C++14) |
Defined in header <type_traits> | ||
template<class T, T v> struct integral_constant; | (since C++11) | |
std::integral_constant
wraps a static constant of specified type. It is the base class for the C++ type traits.
If the program adds specializations forstd::integral_constant
, the behavior is undefined.
Contents |
A helper alias templatestd::bool_constant
is defined for the common case whereT
isbool.
template<bool B> using bool_constant= integral_constant<bool, B>; | (since C++17) | |
Two typedefs for the common case whereT
isbool are provided:
Defined in header <type_traits> | |
Name | Definition |
true_type | std::integral_constant<bool,true> |
false_type | std::integral_constant<bool,false> |
Name | Definition |
value_type | T |
type | std::integral_constant<T, v> |
Name | Value |
constexpr T value [static] | v (public static member constant) |
operator value_type | returns the wrapped value (public member function)[edit] |
operator() (C++14) | returns the wrapped value (public member function)[edit] |
constexpr operator value_type()constnoexcept; | ||
Conversion function. Returns the wrapped value.
constexpr value_type operator()()constnoexcept; | (since C++14) | |
Returns the wrapped value. This function enablesstd::integral_constant
to serve as a source of compile-time function objects.
template<class T, T v>struct integral_constant{staticconstexpr T value= v;using value_type= T;using type= integral_constant;// using injected-class-nameconstexpr operator value_type()constnoexcept{return value;}constexpr value_type operator()()constnoexcept{return value;}// since c++14}; |
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_integral_constant_callable | 201304L | (C++14) | std::integral_constant::operator() |
__cpp_lib_bool_constant | 201505L | (C++17) | std::bool_constant |
#include <type_traits> using two_t= std::integral_constant<int,2>;using four_t= std::integral_constant<int,4>; static_assert(notstd::is_same_v<two_t, four_t>);static_assert(two_t::value*2== four_t::value,"2*2 != 4");static_assert(two_t()<<1== four_t()>>0,"2*2 != 4"); enumclass E{ e1, e2};using c1= std::integral_constant<E, E::e1>;using c2= std::integral_constant<E, E::e2>;static_assert(c1::value!= E::e2);static_assert(c1()== E::e1);static_assert(std::is_same_v<c2, c2>); int main(){}
(C++14) | implements compile-time sequence of integers (class template)[edit] |