Caution
One of the most serious drawbacks of function templates
is the danger of generating an instance of the function
that is incorrect because of type conflicts.
Except by writing specialized template functions to take
care of such cases, there is no way to protect the client
from using the function incorrectly, causing erroneous
instances of the function to be generated.
Be very careful when writing function templates to
ensure that all possible combinations will create correct
functions.