template

Templates are the basis for generic programming in C++. 
A template is a construct that generates an ordinary type or function at compile time based on arguments the user supplies as the template parameters. 
C++ templates support non-type parameters, also called value parameters. Note the syntax in the template declaration. The value argument is passed in as a template argument at compile time and must be const or a constexpr expression.