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.

Reply via email to