Namespaces
Variants

std:: negation

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
Type properties
(C++11)
(C++11)
(C++14)
(C++11) (deprecated in C++26)
(C++11) ( until C++20* )
(C++11) (deprecated in C++20)
(C++11)
Type trait constants
Metafunctions
negation
(C++17)
Supported operations
Relationships and property queries
Type modifications
Type transformations
(C++11) (deprecated in C++23)
(C++11) (deprecated in C++23)
(C++11)
(C++11) ( until C++20* ) (C++17)

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

Формирует логическое отрицание трейта типа B .

Тип std :: negation < B > является UnaryTypeTrait с базовой характеристикой 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 , который равен false при явном преобразовании в bool , 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() {}

Смотрите также

вариативная логическая метафункция И
(шаблон класса)
вариативная логическая метафункция ИЛИ
(шаблон класса)
константа времени компиляции указанного типа с указанным значением
(шаблон класса)