std::compare_strong_order_fallback
| Definiert in der Header-Datei <compare> |
||
| inline namespace /* nicht spezifiziert */ { inline constexpr /* nicht spezifiziert */ |
(seit C++20) | |
| Aufruf-Signatur |
||
| template< class T, class U > requires /* 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
- std::invocable<__compare_strong_order_fallback_fn, Args...>,
- std::invocable<const __compare_strong_order_fallback_fn, Args...>,
- std::invocable<__compare_strong_order_fallback_fn&, Args...>, und
- std::invocable<const __compare_strong_order_fallback_fn&, Args...>.
Andernfalls nimmt kein Funktionsaufrufoperator von __compare_strong_order_fallback_fn an der Überladungsauflösung teil.
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein 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
| (C++20) |
führt einen 3-Wege-Vergleich durch und erzeugt ein Ergebnis vom Typ std::strong_ordering(Customization Point Objekt) |