An overloaded function is a function that has two or more
implementations that each operate upon a different type.
Function templates allow the compiler to generate overloaded
functions on an as required basis for any function where the
implementations only differ by type.