std::compare_three_way_result
De cppreference.com
Definido en el archivo de encabezado <compare>
|
||
template<class T, class U = T> struct compare_three_way_result; |
(desde C++20) | |
Dejemos que t
y u
denoten l-valores de const std::remove_reference_t<T> y const std::remove_reference_t<U> respectivamente, si la expresión t <=> u está bien formada, proporciona la definición de tipo type
igual a decltype(t <=> u); de lo contrario, no existe un miembro type
.
El comportamiento de un programa que añade especializaciones para compare_three_way_result
no está definido.
Contenido |
[editar] Tipos miembro
Nombre | Definición |
type
|
El tipo del resultado de operator<=> en l-valores de T y U calificados const .
|
[editar] Tipos auxiliares
template<class T, class U = T> using compare_three_way_result_t = typename compare_three_way_result<T>::type; |
(desde C++20) | |
[editar] Posible implementación
// recomendado por Casey Carter // véase también: https://github.com/microsoft/STL/pull/385#discussion_r357894054 template<class T, class U = T> using compare_three_way_result_t = decltype( std::declval<const std::remove_reference_t<T>&>() <=> std::declval<const std::remove_reference_t<U>&>() ); template<class T, class U = T> struct compare_three_way_result {}; template<class T, class U> requires requires { typename compare_three_way_result_t<T, U>; } struct compare_three_way_result { using type = compare_three_way_result_t<T, U>; }; |
[editar] Ejemplo
Ejecuta este código
#include <compare> #include <type_traits> #include <iostream> template <class Ord> void print_cmp_type() { if constexpr (std::is_same_v<Ord, std::strong_ordering>) std::cout << "ordenamiento fuerte\n"; else if constexpr (std::is_same_v<Ord, std::weak_ordering>) std::cout << "ordenamiento débil\n"; else if constexpr (std::is_same_v<Ord, std::partial_ordering>) std::cout << "ordenamiento parcial\n"; else std::cout << "el tipo del resultado de la comparación es ilegal\n"; } int main() { print_cmp_type<std::compare_three_way_result_t<int>>(); print_cmp_type<std::compare_three_way_result_t<double>>(); }
Salida:
ordenamiento fuerte ordenamiento parcial
[editar] Véase también
(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) |
(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 y es sustituible. (clase) |