Namespaces
Variants

std::experimental::ranges:: equal_to

From cppreference.net
Определено в заголовочном файле <experimental/ranges/functional>
template < class T = void >

requires EqualityComparable < T > ||
Same < T, void > ||
/* == on two const T lvalues invokes a built-in operator comparing pointers */

struct equal_to ;
(ranges TS)
template <>
struct equal_to < void > ;
(ranges TS)

Функциональный объект для выполнения сравнений. Основной шаблон вызывает operator == для const lvalue типа T . Специализация equal_to<void> выводит типы параметров функционального оператора вызова из аргументов (но не тип возвращаемого значения).

Все специализации equal_to являются Semiregular .

Содержание

Типы членов

Тип члена Определение
is_transparent (только для члена equal_to<void> специализации) /* неопределено */

Функции-члены

operator()
проверяет, являются ли аргументы равными
(public member function)

std::experimental::ranges::equal_to:: operator()

constexpr bool operator ( ) ( const T & x, const T & y ) const ;
(1) (член только основного шаблона equal_to<T> )
template < class T, class U >

requires EqualityComparableWith < T, U > ||
/* std::declval<T>() == std::declval<U>() разрешается в
встроенный оператор сравнения указателей */

constexpr bool operator ( ) ( T && t, U && u ) const ;
(2) (член только специализации equal_to<void> )
1) Сравнивает x и y . Эквивалентно return ranges:: equal_to <> { } ( x, y ) ; .
2) Сравнивает t и u . Эквивалентно return std:: forward < T > ( t ) == std:: forward < U > ( u ) ; , за исключением случаев, когда это выражение разрешается в вызов встроенного operator == для сравнения указателей.

Когда вызов (1) или (2) должен был бы вызвать встроенный оператор сравнения указателей типа P , результат определяется следующим образом:

  • Возвращает false , если одно из (возможно преобразованных) значений первого аргумента предшествует другому в реализации-определенном строгом полном порядке всех значений указателей типа P . Этот строгий полный порядок согласован с частичным порядком, налагаемым встроенными операторами < , > , <= , и >= .
  • В противном случае (ни одно не предшествует другому), возвращает true .

Поведение не определено, если последовательности преобразований из T и U в P не сохраняют равенство (см. ниже).

Сохранение равенства

Выражение сохраняет равенство , если оно даёт равные выходные данные при равных входных данных.

  • Входные данные выражения состоят из его операндов.
  • Выходные данные выражения состоят из его результата и всех операндов, модифицированных выражением (если есть).

Каждое выражение, которое должно сохранять равенство, также должно быть стабильным : два вычисления такого выражения с одинаковыми входными объектами должны давать одинаковые выходные данные при отсутствии явных изменений этих входных объектов между вычислениями.

Примечания

В отличие от std::equal_to , ranges::equal_to требует, чтобы оба оператора == и != были валидными (через ограничения EqualityComparable и EqualityComparableWith ).

Пример

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

функциональный объект, реализующий x == y
(шаблон класса)