Namensräume
Varianten
Aktionen

std::compare_strong_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_strong_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_strong_order_fallback = /* nicht spezifiziert */;

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

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

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

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

Wenn std::decay_t<T> und std::decay_t<U> denselben Typ haben, ist std::compare_strong_order_fallback(t, u) ausdrucksäquivalent zu

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

In allen anderen Fällen ist std::compare_strong_order_fallback(t, u) schlecht geformt, was zu einem Substitutionsfehler führen kann, wenn er im unmittelbaren Kontext einer Templatinstandsetzung auftritt.

Inhalt

Customization Point Objects

Der Name std::compare_strong_order_fallback bezeichnet ein Customization Point Object, ein const Funktionsobjekt eines literalen semiregular-Klassentyps. Zu Illustrationszwecken wird die cv-unqualifizierte Version seines Typs als __compare_strong_order_fallback_fn bezeichnet.

Alle Instanzen von __compare_strong_order_fallback_fn sind gleich. Die Auswirkungen des Aufrufs unterschiedlicher Instanzen des Typs __compare_strong_order_fallback_fn auf dieselben Argumente sind äquivalent, unabhängig davon, ob der den 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_strong_order_fallback frei kopiert und seine Kopien können austauschbar verwendet werden.

Gegeben eine Menge von Typen Args..., wenn std::declval<Args>()... die obigen Anforderungen für Argumente von std::compare_strong_order_fallback erfüllen, modelliert __compare_strong_order_fallback_fn

Andernfalls nimmt kein Funktionsaufrufoperator von __compare_strong_order_fallback_fn an der Überladungsauflösung teil.

[bearbeiten] Beispiel

[bearbeiten] Fehlerberichte

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

[bearbeiten] Siehe auch

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