Namespaces
Variants

std::experimental::ranges:: equal_to

From cppreference.net
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)

Funktionsobjekt zum Durchführen von Vergleichen. Die primäre Template-Instanz ruft operator == auf const Lvalues des Typs T auf. Die Spezialisierung equal_to<void> leitet die Parametertypen des Funktionsaufrufoperators aus den Argumenten ab (aber nicht den Rückgabetyp).

Alle Spezialisierungen von equal_to sind Semiregular .

Inhaltsverzeichnis

Mitgliedertypen

Mitgliedtyp Definition
is_transparent (nur Mitglied von equal_to<void> Spezialisierung) /* nicht spezifiziert */

Memberfunktionen

operator()
prüft, ob die Argumente gleich sind
(public member function)

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

constexpr bool operator ( ) ( const T & x, const T & y ) const ;
(1) (nur Mitglied der primären equal_to<T> -Vorlage)
template < class T, class U >

requires EqualityComparableWith < T, U > ||
/* std::declval<T>() == std::declval<U>() resolves to
a built-in operator comparing pointers */

constexpr bool operator ( ) ( T && t, U && u ) const ;
(2) (nur Mitglied der equal_to<void> -Spezialisierung)
1) Vergleicht x und y . Entspricht return ranges:: equal_to <> { } ( x, y ) ; .
2) Vergleicht t und u . Entspricht return std:: forward < T > ( t ) == std:: forward < U > ( u ) ; , außer wenn dieser Ausdruck zu einem Aufruf eines eingebauten operator == führt, der Zeiger vergleicht.

Wenn ein Aufruf von (1) oder (2) einen eingebauten Operator zum Vergleichen von Zeigern des Typs P aufrufen würde, wird das Ergebnis stattdessen wie folgt bestimmt:

  • Gibt false zurück, wenn einer der (möglicherweise konvertierten) Werte des ersten Arguments und der (möglicherweise konvertierte) Wert des zweiten Arguments in der implementierungsdefinierten strengen Totalordnung über alle Zeigerwerte des Typs P vor dem anderen steht. Diese strenge Totalordnung ist konsistent mit der durch die eingebauten Operatoren < , > , <= und >= auferlegten partiellen Ordnung.
  • Andernfalls (weder steht vor dem anderen) gibt true zurück.

Das Verhalten ist undefiniert, es sei denn, die Konvertierungssequenzen von T und U zu P sind gleichheitserhaltend (siehe unten).

Gleichheitserhaltung

Ein Ausdruck ist gleichheitserhaltend , wenn er bei gleichen Eingaben zu gleichen Ausgaben führt.

  • Die Eingaben eines Ausdrucks bestehen aus seinen Operanden.
  • Die Ausgaben eines Ausdrucks bestehen aus seinem Ergebnis und allen durch den Ausdruck modifizierten Operanden (falls vorhanden).

Jeder Ausdruck, der gleichheitserhaltend sein muss, muss außerdem stabil sein: Zwei Auswertungen eines solchen Ausdrucks mit denselben Eingabeobjekten müssen ohne explizite dazwischenliegende Modifikation dieser Eingabeobjekte gleiche Ausgaben haben.

Hinweise

Im Gegensatz zu std::equal_to erfordert ranges::equal_to , dass sowohl == als auch != gültig sind (über die EqualityComparable - und EqualityComparableWith -Constraints).

Beispiel

Siehe auch

Funktionsobjekt, das x == y implementiert
(Klassentemplate)