Apart from types as a template parameter we are allowed to declare
values of constant expressions meeting one of the following criteria:
integral or enumeration type,
pointer to object or pointer to function,
lvalue reference to object or lvalue reference to function,
pointer to member,
st...