Templates allow to create generic functions that admit any data type as parameters
and return value without having to overload the function with all the possible data
types. Until certain point they fulfill the functionality of a macro. Its prototype
is any of the two following ones:
template <class indetifier> function_declaration; template <typename indetifier>
The only difference between both prototypes is the use of keyword class or typename,
its use is indistinct since both expressions have exactly the same meaning and behave
exactly the same way.