12 Overloading [over]

12.1 Preamble [over.pre]

When two or more different declarations are specified for a single name in the same scope, that name is said to be overloaded, and the declarations are called overloaded declarations.
Only function and function template declarations can be overloaded; variable and type declarations cannot be overloaded.
When a function name is used in a call, which function declaration is being referenced and the validity of the call are determined by comparing the types of the arguments at the point of use with the types of the parameters in the declarations that are visible at the point of use.
This function selection process is called overload resolution and is defined in [over.match].
double abs(double);
int abs(int);

abs(1);             // calls abs(int);
abs(1.0);           // calls abs(double);
— end example