std::common_comparison_category
Von cppreference.com
| Definiert in der Header-Datei <compare> |
||
| template< class... Ts > struct common_comparison_category |
(seit C++20) | |
Die Klassenschablone std::common_comparison_category stellt einen Alias (als Member-Typalias type) für die stärkste Vergleichskategorie bereit, in die alle Vorlagenargumente Ts... konvertiert werden können.
Im Detail wird der gemeinsame Vergleichstyp einer Liste von n Typen T0...Tn-1 wie folgt definiert:
- Wenn irgendein
Ti kein Vergleichskategorie-Typ ist (std::partial_ordering, std::weak_ordering, std::strong_ordering), dann istUvoid. - Andernfalls, wenn mindestens ein
Ti std::partial_ordering ist, dann istUstd::partial_ordering. - Andernfalls, wenn mindestens ein
Ti std::weak_ordering ist, dann istUstd::weak_ordering. - Andernfalls (wenn jedes
Ti std::strong_ordering ist oder wenn die Liste leer ist), dann istUstd::strong_ordering.
Inhalt |
[bearbeiten] Template-Parameter
| ...Ts | - | eine möglicherweise leere Liste von Typen |
[bearbeiten] Hilfsschablone
| template< class... Ts > using common_comparison_category_t = common_comparison_category<Ts...>::type; |
(seit C++20) | |
[bearbeiten] Member-Typen
| Mitgliedertyp | Definition |
type
|
die stärkste gemeinsame Vergleichskategorie (wie oben definiert) |
[bearbeiten] Mögliche Implementierung
namespace detail { template<unsigned int> struct common_cmpcat_base { using type = void; }; template<> struct common_cmpcat_base<0u> { using type = std::strong_ordering; }; template<> struct common_cmpcat_base<2u> { using type = std::partial_ordering; }; template<> struct common_cmpcat_base<4u> { using type = std::weak_ordering; }; template<> struct common_cmpcat_base<6u> { using type = std::partial_ordering; }; } // namespace detail template<class...Ts> struct common_comparison_category : detail::common_cmpcat_base<(0u | ... | (std::is_same_v<Ts, std::strong_ordering> ? 0u : std::is_same_v<Ts, std::weak_ordering> ? 4u : std::is_same_v<Ts, std::partial_ordering> ? 2u : 1u) )> {}; |
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[bearbeiten] Siehe auch
| (C++20) |
der Ergebnistyp des 3-Wege-Vergleichs, der alle 6 Operatoren unterstützt und substituierbar ist (Klasse) |
| (C++20) |
der Ergebnistyp des 3-Wege-Vergleichs, der alle 6 Operatoren unterstützt und nicht substituierbar ist (Klasse) |
| (C++20) |
der Ergebnistyp des 3-Wege-Vergleichs, der alle 6 Operatoren unterstützt, nicht substituierbar ist und unvergleichbare Werte zulässt (Klasse) |