https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105200

--- Comment #5 from Patrick Palka <ppalka at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #2)
> If one defines instead say bool operator<(const foo, const foo);
> then the built-in candidate isn't considered because of
> https://eel.is/c++draft/over.match.oper#3.3
> But for the user operator<=> vs. built-in operator<, they don't have the
> same operator name, so the built-in operator< is in the candidate set.

I came to the same conclusion but for a different reason.  According to p3.3.4
only a "non-member candidate" can prevent a built-in candidate from being
considered.  And according to p3.2 and p3.4, a user operator<=> is a "rewritten
candidate" not a "non-member candidate", and therefore a user operator<=> can't
prevent a built-in candidate from being considered (even if their
parameter-type-lists are the same).

Reply via email to