Templates provide the ability to define C++ classes which support
generic programming techniques. Templates can be considered as a
powerful kind of macro facility. When a templated class or function is
used with a specific class or type, such as
the corresponding template code is compiled with that type substituted
in the appropriate places.