cpp/language/overloaded address

Besides, where takes place, the name of an overloaded function may appear in the following 7 contexts:

In each context, the name of an overloaded function may be preceded by address-of operator and may be enclosed in a redundant set of parentheses.

In all these contexts, the function selected from the overload set is the function whose type matches the pointer to function, reference to function, or pointer to member function type that is expected by target.

The parameter types and the return type of the function must match the target exactly. No implicit conversions are considered (e.g. a function returning a pointer to derived won't get selected when initializing a pointer to function returning a pointer to base).

If the function name names a function template, then, first, is done, and if it succeeds, it produces a single template specialization which is added to the set of overloads to consider. If more than one function from the set matches the target, and at least one function is non-template, the template specializations are eliminated from consideration. . If all remaining candidates are template specializations, ones are removed if more specialized are available. If more than one candidate remains after the removals, the program is ill-formed.