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.