
Steven Watanabe:
I think that the compiler is correct to find the global f, but I don't think it should cause the static f to be hidden.
3.4.2 "When an unqualified name is used as the postfix-expression in a function call..."
Look further in 3.4.2/3: Let X be the lookup set produced by unqualified lookup (3.4.1) and let Y be the lookup set produced by argument dependent lookup (defined as follows). If X contains - a declaration of a class member, or - a block-scope function declaration that is not a using-declaration, or - a declaration that is neither a function or a function template then Y is empty. X contains f, a class member, even if it's a static class member.
- enum _vt { value = sizeof( f( static_cast<Y*>(0) ) ) == sizeof(yes) }; + enum _vt { value = sizeof( (f)( static_cast<Y*>(0) ) ) == sizeof(yes) };
Yes, this works. No objections.