http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50533
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-09-27 12:59:41 UTC --- (In reply to comment #0) > Please, look at this debate: No, please follow the bug reporting instructions at http://gcc.gnu.org/bugs/ and post a testcase, not a link to somewhere else. Your case can be reduced to: struct E { E(int) { } }; int main() { throw E::E(1); } The C++11 standard says that in this case the name E::E names the constructor (not the class) and that "Such a constructor name shall be used only in the declarator-id of a declaration that names a constructor or in a using-declaration." So I believe your code is invalid.