A formal document is an ISO C ++ standard, and yes, you can do it.
The entirety of ISO C ++ 11 Chapter 13 is about overloading, but the first few paragraphs summarize it:
If two or more different declarations are specified for the same name in the same area, this name is considered overloaded. By extension, two declarations in the same area that declare the same name but with different types are called overloaded declarations. Only function and function template declarations can be overloaded; variable and type declarations cannot be overloaded.
When an overloaded function name that refers to an overloaded function declaration is used in a call, it is determined by comparing the types of arguments at the point of use with the types of parameters in overloaded declarations that are visible at the point of use.
Overloading is possible if the parameter list is different, including the order. It differs in all three cases that you present in your question:
{int, double} vs {int, double, double} {int, double} vs {double, double} {int, double} vs {double, int}
Please note that overloading is not possible for two functions:
void func(int par1, int par2); void func(int par2, int par1);
since these are really only those types that provide uniqueness, not parameter names. Both of these functions are called func , and both of them have a list of parameters {int, int} , so they are not unique.