std::ranges::equal_to
| Определено в заголовочном файле <functional>
|
||
struct equal_to; |
(начиная с C++20) | |
Функциональный объект для выполнения сравнений. Типы параметров оператора вызова функции (но не тип возвращаемого значения) выводятся из аргументов.
Определяемый реализацией строгий общий порядок указателей
Оператор вызова функции выдаёт определённый реализацией строгий общий порядок указателей, если оператор = между аргументами вызывает встроенный оператор сравнения для указателей, даже если встроенный = оператор нет.
Строгий общий порядок, определяемый реализацией, согласуется с частичным порядком, налагаемым встроенными операторами сравнения (<=>, <, >, <= и >=), и согласуется со следующими стандартными функциональными объектами:
- std::less, std::greater, std::less_equal и std::greater_equal, когда аргумент шаблона тип указателя или
void
- std::ranges::equal_to, std::ranges::not_equal_to, std::ranges::less, std::ranges::greater, std::ranges::less_equal, std::ranges::greater_equal и std::compare_three_way
Типы элементы
| Тип элемент | Определение |
is_transparent
|
/* неопределено */
|
Функции-элементы
| проверяет, равны ли аргументы (public функция-элемент) |
std::ranges::equal_to::operator()
<tbody> </tbody> template< class T, class U > requires std::equality_comparable_with<T, U> // с разными семантическими требованиями constexpr bool operator()( T&& t, U&& u ) const; |
||
Сравнивает t и u, что эквивалентно return std::forward<T>(t) == std::forward<U>(u);, за исключением случаев, когда это выражение разрешается вызовом встроенного operator== сравнения указателей.
Когда вызов не вызывает встроенный оператор сравнения указателей, поведение не определено, если std::equality_comparable_with<T, U> не моделируется.
Когда вызов вызывает встроенный оператор, сравнивающий указатели типа P, вместо этого результат определяется следующим образом:
- Возвращает
false, если одно из (возможно преобразованного) значения первого аргумента и (возможно преобразованного) значения второго аргумента предшествует другому в определяемом реализацией строгом общем порядке для всех значений указателя типаP. Этот строгий полный порядок согласуется с частичным порядком, заданным встроенными операторами<,>,<=и>=. - Иначе (ни одно не предшествует другому), возвращает
true.
Поведение не определено, если только последовательности преобразования из T и U в P не сохраняют равенство.
Сохранение равенства
Выражения, объявленные в выражениях requires концептов стандартной библиотеки, должны сохранять равенство (если не указано иное).
Примечание
По сравнению с std::equal_to, std::ranges::equal_to дополнительно требует, чтобы != было действительным, и чтобы оба типа аргументов были (однородно) сопоставимыми сами с собой (через ограничение equality_comparable_with).
Пример
| Этот раздел не завершён Причина: нет примера |
Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| LWG 3530 | C++20 | синтаксические проверки при сравнении указателей были ослаблены | смягчены только семантические требования |
Смотрите также
функциональный объект, реализующий x == y (шаблон класса) |