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.