std::compare_partial_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 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
- std::invocable<__compare_partial_order_fallback_fn, Args...>,
- std::invocable<const __compare_partial_order_fallback_fn, Args...>,
- std::invocable<__compare_partial_order_fallback_fn&, Args...>, und
- std::invocable<const __compare_partial_order_fallback_fn&, Args...>.
Andernfalls nimmt kein operator() von __compare_partial_order_fallback_fn an der Überladungsauflösung teil.
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein 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
| (C++20) |
führt einen 3-Wege-Vergleich durch und erzeugt ein Ergebnis vom Typ std::partial_ordering(Customization Point Objekt) |