http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56239
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-02-07 13:14:12 UTC --- Created attachment 29384 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29384 gcc48-pr56239.patch If () is the only problem, then it can be fixed e.g. by the following patch (untested so far, except for make -C gcc check-g++). BTW, I wonder where the standard resolves the ambiguity between parsing it as a function call with parenthesized ctor and between a cast. For zero operands it is not ambiguous, but if there is one or more operands, apparently it should be parsed as cast, but I haven't found where the standard says so. struct S { int operator()(int, int); }; int main() { (S())(1, 2); } //int main() { S s; s(1, 2); }