Если вы продолжите немного просматривать справочный сайт, вы можете перейти к разделу сравнения по умолчанию , в котором просто говорится:
Вкратце, класс, который определяет operator<=>
, автоматически получает сгенерированные компилятором операторы <
, <=
, >
и >=
.
Итак, если "космический корабль" оператор существует для класса, компилятор автоматически сгенерирует оставшиеся операторы сравнения, используя результат оператора <=>
.
Обратите внимание, что оператор ==
генерируется , а не (даже хотя это должно быть возможно), но std::vector
сохраняет перегрузку operator==
.
Что касается:
С ++ 20 начнет давать ошибки в старых кодах?
Нет, не будет.
При сборке с помощью компилятора C ++ 20 стандартная библиотека, используемая с ним, должна также быть сделана для C ++ 20 и, следовательно, реализовать оператор <=>
, который затем будет использоваться, как описано выше.
Однако, если Вы используете компилятор C ++ 20 для сборки со старой стандартной библиотекой, в этой старой стандартной библиотеке все еще будут реализованы более старые операторы сравнения.