https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109751
--- Comment #11 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Reduced down to: ``` template<typename _Tp> concept cmpeq = requires(_Tp __t, _Tp __u) { { __u != __t } ; }; template<typename D> struct iterator_interface { friend constexpr bool operator>=(D lhs, D rhs) requires cmpeq<D> { return true; } }; template<typename T> struct iterator : iterator_interface<iterator<T>> { bool operator==(iterator) const; iterator &operator++(); iterator &operator++(int); }; static_assert(cmpeq<iterator<int>>); ``` Which does make it look invalid for the reasons why I mentioned. clang compiles the above just fine and so does GCC 12.x.