Class Templates
A class template's formal argument list may include other
template classes. This means that the type dependency is
based on an instantiation of another abstraction. When this
is the case, the identifier representing the type dependency
is preceded by the keyword template, the specific type
dependencies to be substituted supplied in angle brackets,
and the keyword class:
       template <template <actual_args> class_id>
When making use of this features, the template classes
being used as formal arguments must be defined before the
first use that causes an instantiation of the class template.