Синтезированное трехстороннее сравнение типа 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
Код: Выделить всё
a == b ? std::weak_ordering::equivalent :
a < b ? std::weak_ordering::less :
std::weak_ordering::greater
Код: Выделить всё
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
Мобильная версия