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)