std::partial_order
definiert in Header <compare>
|
||
inline namespace /* unspecified */ { inline constexpr /* unspecified */ partial_order = /* unspecified */; |
||
Call signature |
||
template< class T, class U > requires /* see below */ |
||
Vergleicht zwei Werte mittels 3-Wegevergleich und erzeugt ein Ergebnis vom Typ std::partial_ordering.
Seien t
und u
Ausdrücke, T
und U
definiert durch decltype((t)) bzw. decltype((u)), dann ist std::partial_order(t, u) ausdrucksäquivalent zu:
- Falls std::is_same_v<std::decay_t<T>, std::decay_t<U>> wahr ist, gilt:
- std::partial_ordering(partial_order(t, u)), falls es ein wohlgeformter Ausdruck unter Berücksichtigung der Auflösung für Überladung in einem Kontext, der keine Deklaration für
std::partial_order
beinhaltet, - anderenfalls std::partial_ordering(std::compare_three_way()(t, u)), falls es wohlgeformt ist,
- anderenfalls std::partial_ordering(std::weak_order(t, u)), falls es wohlgeformt ist,
- std::partial_ordering(partial_order(t, u)), falls es ein wohlgeformter Ausdruck unter Berücksichtigung der Auflösung für Überladung in einem Kontext, der keine Deklaration für
- In allen anderen Fällen ist der Ausdruck nicht wohlgeformt, welches zu einen Substitutionsfehler führen kann, wenn er im unmittelbarem Kontekt einer Templateinstantizierung steht.
Inhaltsverzeichnis |
[Bearbeiten] ausdrucksäquivalent
Der Ausdruck e ist ausdrucksäquivalent zum Ausdruck f, falls e und f die gleiche Wirkung haben, entweder beide Ausnahmen werfen können oder beide keine Ausnahmen werfen (d.h. noexcept(e) == noexcept(f)) und entweder beide konstante Unterausdrücke oder beide nicht-konstante Unterausdrücke.
[Bearbeiten] Anpassungspunkte
Der Name std::partial_order
bezeichnet einen Anpassungspunkt, der ein konstantes Funktionsobjekt eines literalen semiregulären
Klassentyp ist. Zu Darstellungszwecken wird die cv-unqualifizierte Version des Typs mit __partial_order_fn
bezeichnet.
Alle Instanzen von __partial_order_fn
sind gleich. Die Wirkung des Aufrufens von verschiedenen Instanzen vom Typ __partial_order_fn
auf den selben Argumenten ist äquivalent, unabhängig davon ob der Ausdruck, der die Instanz bezeichnet, ein lokalisierbarer oder lesbarer Wert ist und ob er eine const-Qualifikation hat oder nicht. A volatile-qualifizierte Instance muß nicht aufrufbar sein.) . Dadurch kann std::partial_order
frei kopiert werden und die Kopien können beliebig ausgetauscht werden.
Bei einer gegebenen Menge von Typen Args...
bildet __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...> ab, falls std::declval<Args>()... die obigen Anforderungen an Argumente von std::partial_order
.
Anderenfalls kein Funktionsaufrufoperator von __partial_order_fn
nimmt an der Auflösung der Überladungen teil.
[Bearbeiten] Anmerkungen
[Bearbeiten] Beispiele
This section is incomplete Reason: no example |
[Bearbeiten] Referenzen
(C++20) |
der Ergebnistyp des 3-Wegevergleichs, der alle 6 Operatoren unterstützt, nicht ersetzbar ist und nichtvergleichbare Werte erlaubt (Klasse) |
(C++20) |
führt einen 3-Wegevergleich und erzeugt ein Ergebnis vom Typ std::strong_ordering (Anpassungspunkt) |
(C++20) |
führt einen 3-Wegevergleich durch und erzeugt ein Ergebnis vom Typ std::weak_ordering (Anpassungspunkt) |
führt einen 3-Wegevergeleich durch und erzeugt ein Ergebnis vom Typ std::partial_ordering auch wenn operator<=> nicht verfügbar ist (Anpassungspunkt) |