Scroll to navigation

std::negation(3) C++ Standard Libary std::negation(3)

NAME

std::negation - std::negation

Synopsis


Defined in header <type_traits>
template<class B> (since C++17)
struct negation;


Forms the logical negation of the type trait B.


The type std::negation<B> is a UnaryTypeTrait with a base characteristic of
std::bool_constant<!bool(B::value)>.


The behavior of a program that adds specializations for negation or negation_v is
undefined.

Template parameters


B - any type such that the expression bool(B::value) is a valid constant expression


Helper variable template


template<class B> (since C++17)
inline constexpr bool negation_v = negation<B>::value;

Inherited from std::integral_constant

Member constants


value true if B has a member ::value that is false when explicitly converted to
[static] bool , false otherwise
(public static member constant)

Member functions


operator bool converts the object to bool, returns value
(public member function)
operator() returns value
(C++14) (public member function)

Member types


Type Definition
value_type bool
type std::integral_constant<bool, value>

Possible implementation


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

Notes


Feature-test macro: __cpp_lib_logical_traits

Example

// Run this code


#include <iostream>
#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,
"");


int main()
{
std::cout << std::boolalpha;
std::cout << std::negation<std::bool_constant<true>>::value << '\n';
std::cout << std::negation<std::bool_constant<false>>::value << '\n';
}

Output:


false
true

See also


conjunction variadic logical AND metafunction
(C++17) (class template)
disjunction variadic logical OR metafunction
(C++17) (class template)
integral_constant
bool_constant compile-time constant of specified type with specified value
(C++11) (class template)
(C++17)

2022.07.31 http://cppreference.com