std::common_comparison_category
От ru.cppreference.net
| Определён в заголовке <compare>
|
||
template< class... Ts >
struct common_comparison_category
{
using type = /* see below */ ;
};
|
(начиная с C++20) | |
Шаблон класса std::common_comparison_category предоставляет псевдоним (в виде typedef-члена type) для самой строгой категории сравнения, к которой могут быть преобразованы все аргументы шаблона 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 | - | возможно пустой список типов |
Вспомогательный шаблон
|
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) |