std::common_comparison_category
Aus cppreference.com
<tbody>
</tbody>
| definiert in Header <compare>
|
||
template<class... Ts> struct common_comparison_category { using type = /*see below*/ ; }; |
||
Das Klassentemplate std::common_comparison_category bietet einen Alias (durch den Klassentyp type) für die stärkste Vergleichskategorie in die alle Templateargument konvertiert werden können.
Die gemeinsame stärkste Vergleichskategorie einer Liste von n Typen T0...Tn-1 ist wie folgt definiert:
- Falls irgendein Ti kein Type einer Vergleichskategorie (std::partial_ordering, std::weak_ordering, std::strong_ordering) ist, dann ist U
void. - Falls ansonsten mindestens ein Ti std::partial_ordering ist, so ist U std::partial_ordering.
- Falls ansonsten mindestens ein Ti std::weak_ordering ist, so ist U std::weak_ordering.
- Ansonsten ist U std::strong_ordering, da dann jedes Ti std::strong_ordering oder die Liste leer ist.
Templateparameter
| ...Ts | - | eine möglicherweise leere Liste von Typen |
Hilfstemplates
<tbody> </tbody> template< class... Ts > using common_comparison_category_t = typename common_comparison_category<Ts...>::type; |
||
Hilfstypen
| Typ | 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; };
} // 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)
)> {};
|
Beispiel
| This section is incomplete Reason: no example |
Referenzen
(C++20) |
das Ergebnis des 3-Wegevergleichs, der alle 6 Operatoren unterstützt und ersetzbar ist (Klasse) |
(C++20) |
das Ergebnis eines 3-Wegevergleichs, der alle 6 Operatoren unterstützt und nicht ersetzbar ist (Klasse) |
(C++20) |
der Ergebnistyp des 3-Wegevergleichs, der alle 6 Operatoren unterstützt, nicht ersetzbar ist und nichtvergleichbare Werte erlaubt (Klasse) |