Function Templates
Type dependencies are deduced by the compiler by
matching the actual arguments in a call with the formal
argument in the function template formal argument list.
Type dependencies may also be explicitly specified in the
function call, adding flexibility in how we specify our
formal arguments.
By explicitly specifying type dependencies, the return type
can be a type distinct from the types in the function's
formal argument list.
function_identifier <data type list> (actual arguments)