https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121327
Patrick Palka <ppalka at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Component|c++ |libstdc++
--- Comment #3 from Patrick Palka <ppalka at gcc dot gnu.org> ---
Perhaps a more palatable workaround is to constrain the generic operator== to
exclude types that are convertible to id (since the non-generic operator== will
handle them):
template <typename U>
requires (!std::convertible_to<U, const id&>)
&& std::equality_comparable_with<T, U>
constexpr bool operator==(const U& other) const {
return m_id == other;
}
But yeah, I think we're behaving as specified... some concepts are just prone
to accidental constraint recursion.