https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106810
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Reduced down just this: ``` template <class a, class b> concept t = requires(a aa, b bb) { aa == bb; }; template <class I2> struct I { using value_type = int; using difference_type = int; value_type& operator*() const; I& operator++(); I operator++(int); template<t<I2> S> friend bool operator==(I, S); }; static_assert(t<int*, I<int*>>); ``` I think GCC is correct in saying this is recusive even.