Spec-Zone.ru › C++

Именованные требования C++: LessThanComparable

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

Требования

Тип T удовлетворяет требованиям LessThanComparable, если для заданных выражений a, b и c типа T или constT(начиная с 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 Применен к Опубликованное поведение Корректное поведение
LWG 2114
(P2167R3)
C++98 преобразование к bool было недостаточным для отражения ожиданий реализаций требования усилены

См. также

Compare
бинарный предикат, устанавливающий отношение порядка
(именованное требование)
strict_weak_order
(C++20)
задает, что relation задает строгий слабый порядок
(концепт)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/LessThanComparable

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API