std::common_comparison_category
De cppreference.com
<tbody>
</tbody>
| Definido en el archivo de encabezado <compare>
|
||
template<class... Ts> struct common_comparison_category { using type = /* véase más abajo*/ ; }; |
(desde C++20) | |
La plantilla de clase std::common_comparison_category proporciona un alias (como la definición de tipo miembro type) para la categoría de comparación más fuerte a la cual 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 manera siguiente:
- Si cualquier Ti no es un tipo de categoría de comparación (std::partial_ordering, std::weak_ordering, std::strong_ordering), U es
void. - De lo contrario, si al menos una Ti es std::partial_ordering, U es std::partial_ordering
- De lo contrario, si al menos una Ti es std::weak_ordering, U es std::weak_ordering
- De lo contrario (si toda Ti es std::strong_ordering, o si la lista está vacía), U es std::strong_ordering.
Parámetros de plantilla
| ...Ts | - | Una lista de tipos posiblemente vacía. |
Plantilla auxiliar
<tbody> </tbody> template< class... Ts > using common_comparison_category_t = typename common_comparison_category<Ts...>::type; |
(desde C++20) | |
Tipos miembro
| Tipo miembro | Definición |
type
|
La categoría común de comparación más fuerte (como se definió anteriormente). |
Posible implementación
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 del resultado de una comparación de tres vías que soporta todos los 6 operadores y es sustituible. (clase) |
(C++20) |
El tipo del resultado de una comparación de tres vías que soporta todos los 6 operadores y no es sustituible. (clase) |
(C++20) |
El tipo del resultado de una comparación de tres vías que soporta todos los 6 operadores, no es sustituible y permite valores incomparables. (clase) |