Spec-Zone.ru › C++

std::negation

Определён в заголовочном файле <type_traits>
template< class B >
struct negation;
(начиная с C++17)

Образует логическое отрицание трейта типа B.

Тип std::negation<B> является унарным трейтом типа с базовой характеристикой std::bool_constant<!bool(B::value)>.

Если программа добавляет специализации для std::negation или std::negation_v, поведение не определено.

Параметры шаблона

B - любой тип, для которого выражение bool(B::value) является допустимым константным выражением

Вспомогательный шаблон переменной

template< class B >
constexpr bool negation_v = negation<B>::value;
(начиная с C++17)

Унаследовано от std::integral_constant

Константы-члены

value
[static]
true, если B имеет член ::value, который при явном преобразовании к bool является false, в противном случае false
(общедоступная статическая константа-член)

Функции-члены

operator bool
преобразует объект в bool, возвращает value
(общедоступная функция-член)
operator()
(C++14)
возвращает value
(общедоступная функция-член)

Типы-члены

Тип Определение
value_type bool
type std::integral_constant<bool,value>

Возможная реализация

template<class B>
struct negation : std::bool_constant<!bool(B::value)> { };

Примечания

Макрос проверки поддержки возможностей Значение Стандарт Возможность
__cpp_lib_logical_traits 201510L (C++17) Трейты типов для логических операторов

Пример

#include <type_traits>

static_assert(
    std::is_same<
        std::bool_constant<false>,
        typename std::negation<std::bool_constant<true>>::type>::value,
    "");
static_assert(
    std::is_same<
        std::bool_constant<true>,
        typename std::negation<std::bool_constant<false>>::type>::value,
    "");

static_assert(std::negation_v<std::bool_constant<true>> == false);
static_assert(std::negation_v<std::bool_constant<false>> == true);

int main() {}

См. также

conjunction
(C++17)
вариативная метафункция логического И
(шаблон класса)
disjunction
(C++17)
вариативная метафункция логического ИЛИ
(шаблон класса)
integral_constantbool_constant
(C++11)(C++17)
константа времени компиляции заданного типа с заданным значением
(шаблон класса)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/types/negation

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API