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.