We learned how templates allow you to provide the types as parameters and how we can make use of this to write generic code.
Templates in C++ have an additional feature—non-type template parameters.
A non-type template parameter is a template parameter that is not a type—it is a value.
We made use of such non-type template parameters many times when using std::array<int, 10>;.
Here, the second parameter is a non-type template parameter, which represents the size of the array.
The declaration of a non-type template parameter is in the parameter list of the template, but instead of starting with a typename keyword such as the type parameters, it starts with the type of the value, followed by the identifier.
There are strict restrictions on the types that are supported as non-type template parameters: they must be of integral type.
Let's examine the following example of the declaration of a non-type template parameter:
template<typename T, unsigned int size>...