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)>.


If the program adds specializations for std::negation or std::negation_v, the
behavior 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 Value Std Feature
__cpp_lib_logical_traits 201510L (C++17) Logical operator type 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)

2024.06.10 http://cppreference.com