std::common_comparison_category
de es.cppreference.net
< cpp | utilidades
| Definido en el encabezado <compare>
|
||
template< class... Ts >
struct common_comparison_category
{
using type = /* see below */ ;
};
|
(desde C++20) | |
La plantilla de clase std::common_comparison_category proporciona un alias (como el typedef miembro type) para la categoría de comparación más fuerte a la que todos los argumentos de plantilla Ts... pueden ser convertidos.
En detalle, el tipo de comparación común de una lista de n tipos T0...Tn-1 se define de la siguiente manera:
- Si algún
Ti no es un tipo de categoría de comparación (std::partial_ordering, std::weak_ordering, std::strong_ordering),Uesvoid. - De lo contrario, si al menos un
Ti es std::partial_ordering,Ues std::partial_ordering. - De lo contrario, si al menos un
Ti es std::weak_ordering,Ues std::weak_ordering. - De lo contrario (si cada
Ti es std::strong_ordering, o si la lista está vacía),Ues std::strong_ordering.
Parámetros de plantilla
| ...Ts | - | una posiblemente lista vacía de tipos |
Plantilla auxiliar
|
template
<
class
...
Ts
>
using common_comparison_category_t = common_comparison_category < Ts... > :: type ; |
(desde C++20) | |
Tipos de miembros
| Tipo de miembro | Definición |
type
|
la categoría de comparación común más fuerte (como se definió anteriormente) |
Implementación posible
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) )> {}; |
Ejemplo
|
Esta sección está incompleta
Razón: sin ejemplo |
Véase también
|
(C++20)
|
el tipo de resultado de comparación de 3 vías que admite los 6 operadores y es sustituible
(class) |
|
(C++20)
|
el tipo de resultado de comparación de 3 vías que admite los 6 operadores y no es sustituible
(class) |
|
(C++20)
|
el tipo de resultado de comparación de 3 vías que admite los 6 operadores, no es sustituible y permite valores incomparables
(class) |