home | help
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::nega-
     tion_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)

http://cppreference.com 	   2024.06.10			std::negation(3)

home | help