https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98939
Patrick Palka <ppalka at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |ppalka at gcc dot gnu.org --- Comment #5 from Patrick Palka <ppalka at gcc dot gnu.org> --- Some further interesting examples: struct A { template<class T, int=42> struct B; template<class T> struct B<T> { }; // #1 template<class T> struct B<T, 42> { }; // #2 }; Presumably we should continue to diagnose that #2 is a redefinition of #1. And for class-scope explicit specializations (which GCC doesn't yet support): struct A { template<class T, int=T::value> void f(); // #1 template<class T> void f(); // #2 template<> void f<int>(); // #3, specialization of #2 }; The above testcase was valid before P1787, is it still so?