Namespaces
Variants

std::experimental::ranges:: equal_to

From cppreference.net
Definido en el encabezado <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)

Objeto función para realizar comparaciones. La plantilla principal invoca operator == en lvalues constantes de tipo T . La especialización equal_to<void> deduce los tipos de parámetros del operador de llamada a función de los argumentos (pero no el tipo de retorno).

Todas las especializaciones de equal_to son Semiregular .

Contenidos

Tipos de miembros

Tipo de miembro Definición
is_transparent (miembro solo de la especialización equal_to<void> ) /* no especificado */

Funciones miembro

operator()
verifica si los argumentos son iguales
(función miembro pública)

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

constexpr bool operator ( ) ( const T & x, const T & y ) const ;
(1) (miembro solo de la plantilla principal equal_to<T> )
template < class T, class U >

requires EqualityComparableWith < T, U > ||
/* std::declval<T>() == std::declval<U>() se resuelve a
un operador incorporado que compara punteros */

constexpr bool operator ( ) ( T && t, U && u ) const ;
(2) (miembro solo de la especialización equal_to<void> )
1) Compara x y y . Equivalente a return ranges:: equal_to <> { } ( x, y ) ; .
2) Compara t y u . Equivalente a return std:: forward < T > ( t ) == std:: forward < U > ( u ) ; , excepto cuando esa expresión se resuelve en una llamada a un operator == incorporado que compara punteros.

Cuando una llamada a (1) o (2) invocaría un operador incorporado que compara punteros de tipo P , el resultado se determina de la siguiente manera:

  • Retorna false si uno de los valores (posiblemente convertidos) del primer argumento y el valor (posiblemente convertido) del segundo argumento precede al otro en el orden total estricto definido por la implementación sobre todos los valores de puntero de tipo P . Este orden total estricto es consistente con el orden parcial impuesto por los operadores incorporados < , > , <= , y >= .
  • En caso contrario (ninguno precede al otro), retorna true .

El comportamiento es indefinido a menos que las secuencias de conversión de ambos T y U a P preserven la igualdad (ver abajo).

Preservación de igualdad

Una expresión preserva la igualdad si produce salidas iguales dadas entradas iguales.

  • Las entradas de una expresión consisten en sus operandos.
  • Las salidas de una expresión consisten en su resultado y todos los operandos modificados por la expresión (si los hay).

Toda expresión requerida para preservar la igualdad debe además ser estable : dos evaluaciones de dicha expresión con los mismos objetos de entrada deben tener salidas iguales en ausencia de cualquier modificación explícita interviniente de esos objetos de entrada.

Notas

A diferencia de std::equal_to , ranges::equal_to requiere que tanto == como != sean válidos (a través de las restricciones EqualityComparable y EqualityComparableWith ).

Ejemplo

Véase también

objeto función que implementa x == y
(plantilla de clase)