std:: common_comparison_category
|
Definiert im Header
<compare>
|
||
|
template
<
class
...
Ts
>
struct
common_comparison_category
|
(seit C++20) | |
Die Klassenvorlage
std::common_comparison_category
stellt einen Alias (als den Member-Typedef
type
) für die stärkste Vergleichskategorie bereit, in die alle Template-Argumente
Ts...
konvertiert werden können.
Im Detail ist der gemeinsame Vergleichstyp einer Liste von n Typen
T
0
...
T
n-1
wie folgt definiert:
-
Falls irgendein
Ti kein Vergleichskategorietyp ist ( std::partial_ordering , std::weak_ordering , std::strong_ordering ), istUvoid . -
Andernfalls, falls mindestens ein
Ti std::partial_ordering ist, istUstd::partial_ordering . -
Andernfalls, falls mindestens ein
Ti std::weak_ordering ist, istUstd::weak_ordering . -
Andernfalls (wenn jedes
Ti std::strong_ordering ist, oder wenn die Liste leer ist), istUstd::strong_ordering .
Inhaltsverzeichnis |
Template-Parameter
| ...Ts | - | eine möglicherweise leere Liste von Typen |
Hilfsvorlage
|
template
<
class
...
Ts
>
using common_comparison_category_t = common_comparison_category < Ts... > :: type ; |
(seit C++20) | |
Mitgliedertypen
| Membertyp | Definition |
type
|
die stärkste gemeinsame Vergleichskategorie (wie oben definiert) |
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; }; } // Namensbereich 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) )> {}; |
Beispiel
|
Dieser Abschnitt ist unvollständig
Grund: Kein Beispiel |
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 erlaubt
(Klasse) |