std::partial_order
| Definiert in der Header-Datei <compare> |
||
| inline namespace /* nicht spezifiziert */ { inline constexpr /* nicht spezifiziert */ partial_order = /* nicht spezifiziert */; |
(seit C++20) | |
| Aufruf-Signatur |
||
| template< class T, class U > requires /* siehe unten */ |
||
Vergleicht zwei Werte mittels 3-Wege-Vergleich und erzeugt ein Ergebnis vom Typ std::partial_ordering.
Seien t und u Ausdrücke und T und U bezeichnen decltype((t)) bzw. decltype(u)). Dann ist std::partial_order(t, u) ausdrucksäquivalent zu
- Wenn std::is_same_v<std::decay_t<T>, std::decay_t<U>> true ist
- std::partial_ordering(partial_order(t, u)), falls es ein wohlgeformter Ausdruck ist, mit Überladungsauflösung in einem Kontext, der keine Deklaration von
std::partial_orderenthält, - andernfalls std::partial_ordering(std::compare_three_way()(t, u)), falls es wohlgeformt ist,
- andernfalls std::partial_ordering(std::weak_order(t, u)), falls es wohlgeformt ist.
- std::partial_ordering(partial_order(t, u)), falls es ein wohlgeformter Ausdruck ist, mit Überladungsauflösung in einem Kontext, der keine Deklaration von
- In allen anderen Fällen ist der Ausdruck ill-formed, was zu einem Substitutionsfehler führen kann, wenn er im unmittelbaren Kontext einer Template-Instanziierung auftritt.
Customization Point Objects
Der Name std::partial_order bezeichnet ein Customization Point Object, ein konstantes Function Object vom Typ eines Literal semiregular-Klasse. Zu Ausstellungszwecken wird die cv-unqualified Version seines Typs als __partial_order_fn bezeichnet.
Alle Instanzen von __partial_order_fn sind gleich. Die Effekte des Aufrufs verschiedener Instanzen vom Typ __partial_order_fn mit denselben Argumenten sind äquivalent, unabhängig davon, ob der Ausdruck, der die Instanz bezeichnet, ein lvalue oder rvalue ist, und ob er const-qualifiziert ist oder nicht (eine volatile-qualifizierte Instanz muss jedoch nicht aufrufbar sein). Daher kann std::partial_order frei kopiert und seine Kopien können austauschbar verwendet werden.
Gegeben sei eine Menge von Typen Args.... Wenn std::declval<Args>()... die Anforderungen für Argumente an std::partial_order wie oben erfüllen, dann modelliert __partial_order_fn
- std::invocable<__partial_order_fn, Args...>,
- std::invocable<const __partial_order_fn, Args...>,
- std::invocable<__partial_order_fn&, Args...>, und
- std::invocable<const __partial_order_fn&, Args...>.
Andernfalls nimmt kein Funktionsaufrufoperator von __partial_order_fn an der Überladungsauflösung teil.
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[bearbeiten] Siehe auch
| (C++20) |
der Ergebnistyp des 3-Wege-Vergleichs, der alle 6 Operatoren unterstützt, nicht substituierbar ist und unvergleichbare Werte zulässt (Klasse) |
| (C++20) |
führt einen 3-Wege-Vergleich durch und erzeugt ein Ergebnis vom Typ std::strong_ordering(Customization Point Objekt) |
| (C++20) |
führt einen 3-Wege-Vergleich durch und erzeugt ein Ergebnis vom Typ std::weak_ordering(Customization Point Objekt) |
führt einen 3-Wege-Vergleich durch und erzeugt ein Ergebnis vom Typ std::partial_ordering, auch wenn operator<=> nicht verfügbar ist(Customization Point Objekt) |