https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105200
--- Comment #3 from Florian Albrechtskirchinger <falbrechtskirchinger at gmail dot com> --- (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. My understanding is that the candidate set consists of the builtin operators and the rewritten operators. But as you have pointed out, according to https://eel.is/c++draft/over.match.best#general-2.8, the rewritten operator is a worse choice than the builtin one. Yet the other compilers disagree. And I have trouble believing the committee wanted this inconsistent behavior between the legacy operators and spaceship. Where do we go from here? File bugs with the other compilers? Ask the authors of the papers on the spaceship operator?