std::common_comparison_category
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <compare>
|
||
template<class... Ts> struct common_comparison_category { using type = /*cмотрите ниже*/ ; }; |
(начиная с C++20) | |
Шаблонный класс std::common_comparison_category предоставляет псевдоним (как элемент typedef тип) для самой строгой категории сравнения, к которой можно преобразовать все аргументы шаблона Ts....
В частности, общий тип сравнения списка из n типов T0...Tn-1 определяется следующим образом:
- Если какой-либо
Ti не является типом категории сравнения (std::partial_ordering, std::weak_ordering, std::strong_ordering),Uравноvoid. - Иначе, если хотя бы один
Ti равен std::partial_ordering,Uравно std::partial_ordering - Иначе, если хотя бы один
Ti равен std::weak_ordering,Uравно std::weak_ordering - Иначе (если каждый
Ti равен std::strong_ordering, или если список пуст),Uравно std::strong_ordering.
Параметры шаблона
| ...Ts | — | возможно пустой список типов |
Вспомогательный шаблон
<tbody> </tbody> template< class... Ts > using common_comparison_category_t = typename common_comparison_category<Ts...>::type; |
(начиная с C++20) | |
Типы элементы
| Тип элемент | Определение |
type
|
самая строгая общая категория сравнения (как определено выше) |
Возможная реализация
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; };
} // пространство имён 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)
)> {};
|
Пример
| Этот раздел не завершён Причина: нет примера |
Смотрите также
(C++20) |
тип результата трёхстороннего сравнения, который поддерживает все 6 операторов и может быть взаимозаменяемым (класс) |
(C++20) |
тип результата трёхстороннего сравнения, который поддерживает все 6 операторов и невзаимозаменяемый (класс) |
(C++20) |
тип результата трёхстороннего сравнения, который поддерживает все 6 операторов, невзаимозаменяемый и допускает несравнимые значения (класс) |