https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71825
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords|rejects-valid |accepts-invalid, diagnostic --- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- ICC rejects this with: <source>(7): error: class template and template parameter may not have the same name template < class A > struct N::A ^ When struct A is not in a namespace GCC, clang and MSVC all reject it with a similar message. I suspect ICC gets this right really. That is it should be rejected due to the name being the same. In fact if we did: namespace N { template < class A > struct A { }; } GCC, clang and MSVC reject it too.