Namensräume
Varianten

std::compare_strong_order_fallback

Aus cppreference.com
<tbody> </tbody>
definiert in Header <compare>
inline namespace /* unspecified */ { inline constexpr /* unspecified */ compare_strong_order_fallback = /* unspecified */; }
Call signature
template< class T, class U > requires /* see below */ constexpr std::strong_ordering compare_strong_order_fallback(T&& t, U&& u) noexcept(/* see below */);

Führt einen 3-Wegevergleich zwischen t und u durch und erzeugt ein Ergebnis vom Typ std::strong_ordering auf für den Fall, daß der Operator<=> nicht verfügbar ist.

Seien t und u Ausdrücke, T und U definiert als decltype((t)) bzw. decltype((u)), dann ist std::compare_strong_order_fallback(t, u) ausdrucksäquivalent zu:

  • Falls std::is_same_v<std::decay_t<T>, std::decay_t<U>> wahr ist:
    • std::strong_order(t, u), falls das wohlgeformt ist;
    • anderenfalls
t == u ? std::strong_ordering::equal :
t < u  ? std::strong_ordering::less :
         std::strong_ordering::greater
Falls t == u und t < u beide wohlgeformt und konvertierbar nach bool sind, mit der Ausnahme, daß t and u nur einmal evaluiert werden.
  • 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.

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.

Anpassungspunkte

Der Name std::compare_strong_order_fallback bezeichnet einen Anpassungspunkt, der ein konstantes Funktionsobjekt eines literalen semiregulären Klassentyp ist. Zu Darstellungszwecken wird die cv-unqualifizierte Version des Typs mit __compare_strong_order_fallback_fn bezeichnet.

Alle Instanzen von __compare_strong_order_fallback_fn sind gleich. Die Wirkung des Aufrufens von verschiedenen Instanzen vom Typ __compare_strong_order_fallback_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::compare_strong_order_fallback frei kopiert werden und die Kopien können beliebig ausgetauscht werden.

Bei einer gegebenen Menge von Typen Args... bildet __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...> ab, falls std::declval<Args>()... die obigen Anforderungen an Argumente von std::compare_strong_order_fallback. Anderenfalls kein Funktionsaufrufoperator von __compare_strong_order_fallback_fn nimmt an der Auflösung der Überladungen teil.

Beispiele

Referenzen

führt einen 3-Wegevergleich und erzeugt ein Ergebnis vom Typ std::strong_ordering
(Anpassungspunkt) [edit]