Unqualified name lookup applied instead of argument-dependent name lookup
问题 Consider an example from the standard sec 3.4.1/3: typedef int f; namespace N { struct A { friend void f(A &); operator int(); void g(A a) { int i = f(a);// f is the typedef, not the friend // function: equivalent to int(a) } }; } f(a) is postfix expression. How does compiler determine that f(a) is not a function call? I'm wondering when we have no error like f previously declared of typedef int f ; as in the following example: #include <stdio.h> typedef int foo; //error: previous declaration