That's the point. The three-way comparisons don't return
an int because they tell you that you shouldn't just accidentally
return them onwards
...
Don't use return types to influence the design of an API?
It sounds like everyone again discovered that operator overloading just means symbols can mean anything, then tried to "fix" it with a sledgehammer to everyone else's head.
IMO, the language should avoid imposing complex semantics that require having to import symbols to use a syntax feature.
The part about my dislike of library headers is not about just the standard. More headers means more coupling, and just like any other evolving framework, everything I use in std needs to be wrapped when contending differences between implementations. There are numerous situations where I've had to make explicit use of the actual compiler hooks in order to get otherwise standard features to work. One of the most recent was bit_cast<> which was working, then it stopped working, then it started working again. Thanks to a wrapper, which I should not have needed to write, the project could move onwards despite the new issues.
Point being: The fewer wrappers around basic things that need to be made in cases like this, the better.