What Are Integral_constant And () Operator In C++?
Modern C++ has base class features that can be used with other modern features of C++. The std::integral_constant
is the base class for the C++ type traits in C++11, and in C++14, std::integral_constant
gained an operator ()
overload to return the constant value. In this post, we explain what integral_constant
and ()
operator are in C++14.
What is integral_constant in C++?
The std::integral_constant
is the base class for the C++ type traits in
header that wraps a static constant of specified type. The behavior in a code part that adds specializations for std::integral_constant
is undefined.
Here is the definition in
header since C++11,
template< class T, T v > struct integral_constant;

Here is a very simple example to how can we use std::integral_constant
, in C++11 we can use ::value
to retrieve its value,
typedef std::integral_constant< int, 5 > five;
std::cout << five::value << std::endl; // (C++11)

What is the integral_constant () operator in C++?
In C++ 14, std::integral_constant
gained an operator()
overload to return the constant value that can be used with some other useful modern features like templates, lambdas, etc. In C++14, std::integral_constant
gained an operator()
overload to return the constant value. This () operator enables std::integral_constant to serve as a source of compiletime function objects.
In C++14, operator()
is defined as shown below.
constexpr operator value_type() const noexcept;

Here is a simple example how we can use () operator in C++14 and above.
typedef std::integral_constant< int, 5 > five;
std::cout << “five = “ << five::value << std::endl; // value (C++11) std::cout << “five = “ << five() << std::endl; // operator() (C++14)

Is there a full example of how to use integral_constant in C++?
Here is a full example about integral_constant
in modern C++.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 
#include #include
int main() { typedef std::integral_constant< int, 5 > five; typedef std::integral_constant< int, 10 > ten;
std::cout << “five = “ << five::value << std::endl; // value (C++11) std::cout << “five = “ << five() << std::endl; // operator() (C++14) std::cout << “2*five = “ << 2*five::value << std::endl; std::cout << “ten = “ << ten::value << std::endl;
system(“pause”); return 0; }

and the output will be as below:
five = 5 five = 5 2*five = 10 ten = 10

Is there a full example of how to use the integral_constant () operator in C++?
Here is an example of the () operator of integral_constant, we define a myfactorial template struct that returns factorial value in compilation, which means there is no calculation about this operator on run time.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 
#include #include
template <unsigned n> struct myfactorial : std::integral_constant< int, n*myfactorial<n–1>() > { };
template <> struct myfactorial< 0 > : std::integral_constant< int, 1 > { };
int main() { constexpr int f5 = myfactorial<5>::value; // compiler coverts this int f5 = 120;
std::cout << “Factorial 5 = “ << f5 << std::endl; std::cout << “Factorial 6 = “ << myfactorial<6>() << std::endl; // () operator returns constexpr (calculated in compilation not on runtime)
system(“pause”); return 0; }

and the output will be as we show below.
Factorial 5 = 120 Factorial 6 = 720

For more details about this feature, please see https://www.openstd.org/jtc1/sc22/wg21/docs/papers/2013/n3545.pdf
C++ Builder is the easiest and fastest C and C++ compiler and IDE for building simple or professional applications on the Windows, MacOS, iOS & Android operating systems. It is also easy for beginners to learn with its wide range of samples, tutorials, help files, and LSP support for code. RAD Studio’s C++ Builder version comes with the awardwinning VCL framework for highperformance native Windows apps and the powerful FireMonkey (FMX) framework for crossplatform UIs.
There is a free C++ Builder Community Edition for students, beginners, and startups; it can be downloaded from here. For professional developers, there are Professional, Architect, or Enterprise versions of C++ Builder and there is a trial version you can download from here.