https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64446
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |diagnostic Status|UNCONFIRMED |NEW Last reconfirmed| |2015-03-09 Ever confirmed|0 |1 --- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to petschy from comment #0) > 'Base' is definitely a valid class name. No it isn't, Base is a class template, and that is not a class. The error message is completely accurate, although it could be improved to say how to fix the code. Clang also says: p.cc:6:14: error: expected class name struct Foo : Base ^ EDG gives a better error: "p.cc", line 6: error: argument list for class template "Base" is missing struct Foo : Base ^ "p.cc", line 6: error: not a class or struct name struct Foo : Base ^ Ideally the compiler would recognise that Base is a template and point out that the template argument list is missing.