Namespaces
Variants

C++ named requirements: LessThanComparable

From cppreference.net
C++ named requirements

Тип должен работать с < оператором, и результат должен иметь стандартную семантику.

Содержание

Требования

Тип T удовлетворяет требованиям LessThanComparable , если для данных выражений a , b и c типа T или const T (начиная с C++11) , следующее выражение является корректным и имеет указанные эффекты:

Выражение Тип Эффекты
a < b удовлетворяет BooleanTestable
(до C++20)
Устанавливает отношение строгого слабого порядка со следующими свойствами:
  • Для всех a , ! ( a < a ) возвращает true .
  • Если a < b , то ! ( b < a ) .
  • Если a < b и b < c , то a < c .
  • Определяя equiv ( a, b ) как ! ( a < b ) && ! ( b < a ) , если equiv ( a, b ) и equiv ( b, c ) , то equiv ( a, c ) .
моделирует boolean-testable
(начиная с C++20)

Примечания

Для удовлетворения этого требования, типы, не имеющие встроенных операторов сравнения , должны предоставлять пользовательский operator < .

Для типов, которые являются одновременно EqualityComparable и LessThanComparable , стандартная библиотека C++ проводит различие между

  • Равенство , которое является значением выражения a == b и
  • Эквивалентность , которое является значением выражения ! ( a < b ) && ! ( b < a ) .

Отчеты о дефектах

Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 2114
( P2167R3 )
C++98 конвертируемость в bool была слишком слабой для отражения ожиданий реализаций требования усилены

Смотрите также

a BinaryPredicate that establishes an ordering relation
(именованное требование)
specifies that a relation imposes a strict weak ordering
(концепт)