https://en.cppreference.com/w/cpp/langu ... isons.html
Синтезированное трехстороннее сравнение
синтезированное трехстороннее сравнение типа T между glvalues a и b одного и того же типа определяется следующим образом:
- Если разрешение перегрузки для a b приводит к пригодному к использованию кандидату и может быть явно преобразовано в T с помощью static_cast, синтезированное сравнение — static_cast(a b).
- В противном случае, если выполняется любое из следующих условий, синтезированное сравнение не определяется:
Разрешение перегрузки для b находится в хотя бы один жизнеспособный кандидат. - не является типом категории сравнения.
Код: Выделить всё
T - Разрешение перегрузки для a == b не приводит к созданию пригодного к использованию кандидата.
- Разрешение перегрузки для < b не приводит к созданию пригодного к использованию кандидата.
Код: Выделить всё
a == b ? std::strong_ordering::equal :
a < b ? std::strong_ordering::less :
std::strong_ordering::greater
- Иначе, если T равно std::weak_ordering, синтезированное сравнение будет
Код: Выделить всё
a == b ? std::weak_ordering::equivalent :
a < b ? std::weak_ordering::less :
std::weak_ordering::greater
- Иначе (— это std::partial_ordering), синтезированное сравнение —
Код: Выделить всё
T
Код: Выделить всё
a == b ? std::partial_ordering::equivalent :
a < b ? std::partial_ordering::less :
b < a ? std::partial_ordering::greater :
std::partial_ordering::unordered
Кроме того, я не понимаю, как жизнеспособный кандидат на разрешение перегрузки одновременно предотвращает и разрешает использование синтезированного оператора космического корабля.>
Подробнее здесь: https://stackoverflow.com/questions/797 ... comparison
Мобильная версия