Именованные требования C++: EqualityComparable
Тип должен поддерживать оператор ==, а результат должен иметь стандартную семантику.
Требования
Тип T удовлетворяет требованиям EqualityComparable, если для заданных выражений a, b и c типа T или (начиная с C++11) constT следующее выражение является корректным и имеет указанные эффекты:
| Выражение | Тип | Эффекты |
|---|---|---|
a == b | удовлетворяет требованиям BooleanTestable (до C++20) | Задаёт отношение эквивалентности, то есть удовлетворяет следующим свойствам:
|
моделирует boolean-testable(начиная с C++20) |
Примечания
Чтобы удовлетворять этому требованию, типы, у которых нет встроенных операторов сравнения, должны предоставлять определённый пользователем operator==.
Для типов, которые одновременно удовлетворяют требованиям EqualityComparable и LessThanComparable, стандартная библиотека C++ различает
-
равенство, являющееся значением выражения
a == b, и -
эквивалентность, являющуюся значением выражения
!(a < b) && !(b < a).
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применён к | Опубликованное поведение | Исправленное поведение |
|---|---|---|---|
| LWG 283 | C++98 | даже если T удовлетворяет требованиям EqualityComparable,требования не распространялись на объекты constT | они распространяются на constT вместо T |
|
LWG 2114 (P2167R3) | C++98 | преобразование к bool было слишком слабым, чтобы отражать ожидания реализаций | требования усилены |
См. также
|
(C++20)(C++20) | задаёт, что оператор == является отношением эквивалентности (концепт) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/EqualityComparable