https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98939
Alisdair Meredith <alisdairm at me dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |alisdairm at me dot com --- Comment #9 from Alisdair Meredith <alisdairm at me dot com> --- Trying to make sense of the new C++23 deprecation in [depr.template.template], I came up with the following, based on Example 3 in [temp.names]p6: template <typename T> struct A { void f(int); template <typename U> void f(U); }; template <typename T> struct B { template <typename T2> struct C { }; }; // deprecated: T::C is assumed to name a class template: template <typename T, template <typename X> class TT = T::template C> struct D { }; D<B<int> > db; // recommended: T::C is assumed to name a class template: template <typename T, template <typename X> class TT = T::C> struct E { }; E<B<int> > db; Currently, the recommended form does not compile, which I presume is a change to become valid with P1787. Likewise, the deprecated form does not warn — but that is not surprising if the preferred form is not compiling yet! Hope the example is useful.