std::experimental::ranges::less
| Definiert in Header <experimental/ranges/functional> |
||
| template< class T = void > erfordert StrictTotallyOrdered<T> || |
(Ranges TS) | |
| template<> struct less<void>; |
(Ranges TS) | |
Funktionsobjekt für Vergleiche. Die primäre Template-Klasse ruft operator< auf const-Lvalues vom Typ T auf. Die Spezialisierung less<void> leitet die Parametertypen des Funktionsaufrufoperators aus den Argumenten ab (aber nicht den Rückgabetyp).
Alle Spezialisierungen von less sind Semiregular.
Inhalt |
[bearbeiten] Member types
| Mitgliedertyp | Definition |
is_transparent (nur Member der Spezialisierung less<void>) |
/* nicht spezifiziert */ |
[bearbeiten] Member functions
| operator() |
prüft, ob das erste Argument *kleiner* ist als das zweite (öffentliche Memberfunktion) |
std::experimental::ranges::less::operator()
| constexpr bool operator()(const T& x, const T& y) const; |
(1) | (nur Member der primären less<T> Template-Klasse) |
| template< class T, class U > erfordert StrictTotallyOrderedWith<T, U> || |
(2) | (nur Member der Spezialisierung less<void>) |
t und u. Äquivalent zu return std::forward<T>(t) < std::forward<U>(u);, außer wenn dieser Ausdruck zu einem Aufruf eines eingebauten operator< aufgelöst wird, der Zeiger vergleicht.Wenn ein Aufruf von (1) oder (2) einen eingebauten Operator aufrufen würde, der Zeiger vom Typ P vergleicht, wird das Ergebnis stattdessen wie folgt bestimmt:
- Gibt true zurück, wenn der (möglicherweise konvertierte) Wert des ersten Arguments dem (möglicherweise konvertierten) Wert des zweiten Arguments in der implementierungsdefinierten strengen totalen Ordnung aller Zeigerwerte vom Typ
Pvorausgeht. Diese strenge totale Ordnung stimmt mit der partiellen Ordnung überein, die durch die eingebauten Operatoren<,>,<=und>=festgelegt wird. - Andernfalls wird false zurückgegeben.
Das Verhalten ist undefiniert, es sei denn, die Konversionssequenzen von sowohl T als auch U nach P sind gleichheitserhaltend (siehe unten).
[bearbeiten] Gleichheitserhaltung
Ein Ausdruck ist gleichheitserhaltend, wenn er bei gleichen Eingaben gleiche Ausgaben liefert.
- Die Eingaben für einen Ausdruck bestehen aus seinen Operanden.
- Die Ausgaben eines Ausdrucks bestehen aus seinem Ergebnis und allen von dem 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 gleiche Ausgaben liefern, solange keine explizite zwischenzeitliche Modifikation dieser Eingabeobjekte erfolgt.
[bearbeiten] Notes
Im Gegensatz zu std::less erfordert ranges::less, dass alle sechs Vergleichsoperatoren <, <=, >, >=, == und != gültig sind (gemäß den Constraints StrictTotallyOrdered und StrictTotallyOrderedWith).
[bearbeiten] Example
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[bearbeiten] See also
| Funktions-Objekt, das x < y implementiert (Klassen-Template) |