Namensräume
Varianten
Aktionen

std::compare_partial_order_fallback

Von cppreference.com
< cpp‎ | utility
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
compare_partial_order_fallback
(C++20)  
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Relationale Operatoren (in C++20 veraltet)
 
Definiert in der Header-Datei <compare>
inline namespace /* nicht spezifiziert */ {

    inline constexpr /* nicht spezifiziert */
        compare_partial_order_fallback = /* nicht spezifiziert */;

}
(seit C++20)
Aufruf-Signatur
template< class T, class U >

    requires /* siehe unten */
constexpr std::partial_ordering

    compare_partial_order_fallback( T&& t, U&& u ) noexcept(/* siehe unten */);
(seit C++20)

Führt einen Drei-Wege-Vergleich für die Teilausdrücke t und u durch und liefert ein Ergebnis vom Typ std::partial_ordering, auch wenn der Operator <=> nicht verfügbar ist.

Wenn std::decay_t<T> und std::decay_t<U>> desselben Typs sind, ist std::compare_partial_order_fallback(t, u) ausdrucksäquivalent zu

  • std::partial_order(t, u), falls dies ein wohlgeformter Ausdruck ist;
  • andernfalls t == u ? std::partial_ordering::equivalent :
    t < u  ? std::partial_ordering::less :
    u < t  ? std::partial_ordering::greater :
             std::partial_ordering::unordered
    , falls die Ausdrücke t == u, t < u und u < t alle wohlgeformt sind und jeder von decltype(t == u), decltype(t < u) und decltype(u < t) boolean-testable modelliert, mit der Ausnahme, dass t und u nur einmal ausgewertet werden.

In allen anderen Fällen ist std::compare_partial_order_fallback(t, u) schlecht geformt, was zu Substitutionsfehlern führen kann, wenn er im unmittelbaren Kontext einer Template-Instanziierung erscheint.

Inhalt

Customization Point Objects

Der Name std::compare_partial_order_fallback bezeichnet ein Customization Point Object, welches ein konstantes Funktionsobjekt eines literalen semiregular Klassentyps ist. Zu Auslegungszwecken wird die cv-unqualifizierte Version seines Typs als __compare_partial_order_fallback_fn bezeichnet.

Alle Instanzen von __compare_partial_order_fallback_fn sind gleich. Die Auswirkungen des Aufrufs verschiedener Instanzen vom Typ __compare_partial_order_fallback_fn auf dieselben Argumente sind äquivalent, unabhängig davon, ob der die Instanz bezeichnende Ausdruck 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::compare_partial_order_fallback frei kopiert werden und seine Kopien können austauschbar verwendet werden.

Gegeben sei eine Menge von Typen Args.... Wenn std::declval<Args>()... die oben genannten Anforderungen an Argumente für std::compare_partial_order_fallback erfüllt, dann modelliert __compare_partial_order_fallback_fn

Andernfalls nimmt kein operator() von __compare_partial_order_fallback_fn an der Überladungsauflösung teil.

[bearbeiten] Beispiel

[bearbeiten] Defect Reports

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 2114
(P2167R3)
C++20 der Fallback-Mechanismus erforderte nur
Rückgabetypen konvertierbar zu bool waren
Einschränkungen verstärkt
LWG 3465 C++20 der Fallback-Mechanismus verlangte nicht, dass u < t wohlgeformt ist Gefordert
LWG 4157 C++20 P2167R3 überschrieb die Auflösung von LWG Issue 3465 die Auflösung wiederhergestellt

[bearbeiten] Siehe auch

führt einen 3-Wege-Vergleich durch und erzeugt ein Ergebnis vom Typ std::partial_ordering
(Customization Point Objekt)[edit]