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.

Reply via email to