http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55280
Bug #: 55280 Summary: Compiler error: Class definition is recognized as function declaration Classification: Unclassified Product: gcc Version: 4.7.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: guangmu...@gmail.com A and B are both class. If a object is defined by "A a(B());", compiler reports a is none-class type A(B (*)()). I guess g++ translates it to "B temp(); A a(b);". If a is defined by "A a(B(argument));", it's OK. But unfortunately, default constructor is not allowed to be used like "B temp();", temp is declared as a function. ps: vs 2008 doesn't have the problem