https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109751
--- Comment #7 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I think the error message is correct. In the original code we have: ``` ... template<typename _Iter> concept incrementable = regular<_Iter> && requires(_Iter __i) { { __i++ } -> same_as<_Iter>; }; ... namespace boost { namespace stl_interfaces { inline namespace v2 { template< typename D, typename IteratorConcept, typename DifferenceType> struct iterator_interface { friend constexpr bool operator>=(D lhs, D rhs) requires std::equality_comparable<D> { } }; ... template<typename T> struct iterator : boost::stl_interfaces::iterator_interface<iterator<T>, std::forward_iterator_tag, T> { bool operator==(iterator) const; }; ``` iterator<T> is not complete until after the instantiation is finished but we have a std::equality_comparable which does the confusion