https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96840

Patrick Palka <ppalka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |FIXED
             Status|WAITING                     |RESOLVED

--- Comment #3 from Patrick Palka <ppalka at gcc dot gnu.org> ---
With the above patch we now detect and diagnose the self-recursive satisfaction
in the testcase:

96840.C: In substitution of ‘template<class T>  requires  C<T, Rep> void
operator*(T, Int<int>) [with T = int]’:
96840.C:1:64:   required by substitution of ‘template<class T>  requires  C<T,
Rep> void operator*(Int<int>, T) [with T = int]’
96840.C:6:28:   required from here
96840.C:1:37:   required for the satisfaction of ‘C<T, Rep>’ [with T =
Int<int>; Rep = int]
96840.C:1:41:   in requirements with ‘T t’, ‘U u’ [with U = int; T = Int<int>]
96840.C:1:41: error: satisfaction of atomic constraint ‘requires(T t, U u) {t *
 u;} [with U = Rep; T = T]’ depends on itself
    1 | template <class T, class U> concept C = requires(T t, U u) { t * u; };
      |                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~

So I suppose we can mark this PR as resolved.

Reply via email to