Caution
Realize that when we write a function template we may
not know the types that will be used by the client.
Therefore, we recommend using type dependencies only
once within the function's formal argument list.
Also, make sure to handle the use of both built-in and
pointer types.
This may mean that we provide overloaded generalized
function templates or template function specializations.