Partial Specializations
Partial specialization of a class template is the mechanism
that we can use to cause one implementation of a class to
have different behavior than another.
This is primarily useful when a class requires different
behavior depending on the data types used by the client.
We must define the specialized version of the class after
the class template is defined or declared  (called the
primary template).
All members must be completely defined for that version.
This means that all member functions must be defined for
a specialized class template, even in the case where the
functionality is unchanged.