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 |