This code should be an error:
void foo(int); void f3() { int foo(float); { float foo(int); // expected-error {{functions that differ only in their return type cannot be overloaded}} } }
the foo(float) function declared at function scope should not hide the float(int) while trying to redeclare functions.
Please rename this to something like SearchNamespaceScope (and invert the sense of it) to reflect what it now means.