#include <iostream>
#include <type_traits>
int main(){
//creating an integral constant with constexpr
constexpr unsigned int speed_of_light{299792458};
//creating an integral constant with std::integral_constant
typedef std::integral_constant<unsigned int, 299792458> speed_of_light_2;
//using them
std::cout << speed_of_light/2 << '\n';
std::cout << speed_of_light_2::value/2 << '\n';
}
What's special about std::integral_constant
that I would choose to use it over constexpr
?
Their behaviour and use cases look identical to me. I'm trying to think of some kind of template scenario, where constexpr may not suffice.
Template
integral_constant
defines a type, keywordconstexpr
defines a constant. For examplestd::true_type
isstd::integral_constant<bool, true>
.One of the usage examples is
tag-dispatching
.Live example
It can be used with the ternary operator eg