When would I use std::integral_constant over constexpr?
c++, c++11, constants, constexpr, templates
Solution
Template `integral_constant` defines a type, keyword `constexpr` defines a constant. For example `std::true_type` is `std::integral_constant<bool, true>`.
One of the usage examples is `tag-dispatching`.
template<typename T>
void use_impl(const T&, std::false_type)
{
}
template<typename T>
void use_impl(const T&, std::true_type)
{
}
template<typename T>
void use(const T& v)
{
use_impl(v, std::is_integral<T>());
}
Live example
Problem
``` #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.