Basically, g++ seems to have forgotten how to print some part of the error message.
The errant code: template <typename T> struct s1 { typedef T* ptr_type; }; template <typename T, template <typename> class U = s1> struct s2 { typedef U<T> UT; operator /*typename*/ UT::ptr_type () { return 0; } }; And the output: test.cpp:12: error: `#`bound_template_template_parm' not supported by dump_decl#<declaration error>::ptr_type' is not a type Uncommenting the typename keyword fixes the error in the code. No extra compiler options were used. The bug is not present in 4.1 (4.1.2 20060901 (prerelease) (Debian 4.1.1-13)), where gcc instead outputs "error: expected type-specifier". -- Summary: `bound_template_template_parm' not supported by dump_decl Product: gcc Version: 3.4.6 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: olsner at gmail dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29352