Two function declarations of the same name refer to the same function if they
are in the same scope and have equivalent parameter declarations ([over.load])
and equivalent ([temp.over.link]) trailing requires-clauses, if any ([dcl.decl]).
A locally declared function is not in the same scope as a function in
a containing scope.
[Example 3: void f(constchar*);
void g(){externvoid f(int);
f("asdf"); // error: f(int) hides f(const char*)// so there is no f(const char*) in this scope}void caller (){externvoid callee(int, int);
{externvoid callee(int); // hides callee(int, int)
callee(88, 99); // error: only callee(int) in scope}} — end example]