Function Templates
The most specialized functions are those who's arguments
can be applied to a generalized function template or some
other specialization.
When calling a function, the most specialized function is
used, if one is available that matches the actual argument
list.
This means that specialization takes precedence followed
by generalized function templates.
If a regular C++ function with the same name and
signature as a specialized template function is declared
before the definition of the function template, that
declaration is hidden by the template or any specialized
template function that follows.