MyAllocList<T>::type is thus a dependent type, and one of C++’s many
endearing rules is that the names of dependent types must be preceded by
typename.
Both scoped and unscoped enums support specification of the
underlying type. The default underlying type for scoped enums is int.
Unscoped enums have no default underlying type.
Scoped enums may always be forward-declared. Unscoped enums may
be forward-declared only if their declaration specifies an underlying
type.
Prefer deleted functions to private undefined ones. because Any
function may be deleted, including non-member functions and template
instantiations.