std::negation (3) - Linux Manuals

std::negation: std::negation


std::negation - std::negation


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

Forms the logical negation of the type trait B.
The type std::negation<B> is a UnaryTypeTrait with a BaseCharacteristic of std::bool_constant<!bool(B::value)>.

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 bool , false otherwise
         (public static member constant)

Member functions

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

operator() returns value
              (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)> { };


// Run this code

  #include <iostream>
  #include <type_traits>

          typename std::negation<std::bool_constant<true>>::type>::value,
          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';



See also

conjunction variadic logical AND metafunction
                  (class template)

disjunction variadic logical OR metafunction
                  (class template)

bool_constant compile-time constant of specified type with specified value
                  (class template)