Class Templates
We can specify a non-type identifier in the template
formal argument list, prefaced by its data type.
A non-type specifier allows the identifier listed to be
substituted for a value specified by the client at
instantiation time.
template <data_type nontype_identifier>
The data type of non-type identifiers must be an integral
type, an enumeration type, a pointer to an object, a
reference to an object, a pointer to a function, a reference
to a function, or a pointer to a member.
They cannot be void or a floating point type.