std:: common_comparison_category
|
Определено в заголовочном файле
<compare>
|
||
|
template
<
class
...
Ts
>
struct
common_comparison_category
|
(начиная с C++20) | |
Шаблон класса
std::common_comparison_category
предоставляет псевдоним (в виде члена-типа
type
) для наиболее строгой категории сравнения, к которой могут быть преобразованы все аргументы шаблона
Ts...
.
Подробно, общий тип сравнения для списка из n типов
T
0
...
T
n-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 | - | возможно пустой список типов |
Вспомогательный шаблон
|
template
<
class
...
Ts
>
using common_comparison_category_t = 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 операторов и является заменяемым
(class) |
|
(C++20)
|
тип результата трёхстороннего сравнения, который поддерживает все 6 операторов и не является заменяемым
(class) |
|
(C++20)
|
тип результата трёхстороннего сравнения, который поддерживает все 6 операторов, не является заменяемым и допускает несравнимые значения
(class) |