Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::experi...es::Boolean(3)  C++ Standard Libary std::experi...es::Boolean(3)

NAME
       std::experimental::ranges::Boolean - std::experimental::ranges::Boolean

Synopsis
	  Defined in header <experimental/ranges/concepts>
	  template <class B>

	  concept bool Boolean =
	  Movable<std::decay_t<B>> &&
	  requires(const std::remove_reference_t<B>& b1,
	  const	std::remove_reference_t<B>& b2,	const bool a) {
	  { b1 } -> ConvertibleTo<bool>&&;
	  { !b1	} -> ConvertibleTo<bool>&&;
	  { b1 && a } -> Same<bool>&&;
	  { b1 || a } -> Same<bool>&&;
	  { b1 && b2 } -> Same<bool>&&;				 (ranges TS)
	  { a && b2 } -> Same<bool>&&;
	  { b1 || b2 } -> Same<bool>&&;
	  { a || b2 } -> Same<bool>&&;
	  { b1 == b2 } -> ConvertibleTo<bool>&&;
	  { b1 == a } -> ConvertibleTo<bool>&&;
	  { a == b2 } -> ConvertibleTo<bool>&&;
	  { b1 != b2 } -> ConvertibleTo<bool>&&;
	  { b1 != a } -> ConvertibleTo<bool>&&;
	  { a != b2 } -> ConvertibleTo<bool>&&;

	  };

	  The  concept Boolean<B> specifies the	requirements for a type	usable
       in Boolean
	  contexts. For	Boolean	to be satisfied, the  logical  operators  must
       have the	usual
	  behavior (including short-circuiting). More precisely, given

	    * b1, b2, two lvalues of type const	std::remove_reference_t<B>,

	  Boolean<B> is	satisfied only if:

	    * bool(b1) == !bool(!b1)
	    *  b1  &&  b2,  b1 && bool(b2) and bool(b1)	&& b2 are all equal to
       bool(b1)	&&
	      bool(b2) and have	the same short-circuit evaluation;
	    * b1 || b2,	b1 || bool(b2) and bool(b1) || b2  are	all  equal  to
       bool(b1)	||
	      bool(b2) and have	the same short-circuit evaluation;
	    *  bool(b1	== b2),	bool(b1	== bool(b2)), and bool(bool(b1)	== b2)
       are all equal to
	      (bool(b1)	== bool(b2));
	    * bool(b1 != b2), bool(b1 != bool(b2)), and	bool(bool(b1)  !=  b2)
       are all equal to
	      (bool(b1)	!= bool(b2)).

	 Equality preservation

	  An  expression is equality preserving	if it results in equal outputs
       given equal
	  inputs.

	    * The inputs to an expression consist of its operands.
	    * The outputs of an	expression  consist  of	 its  result  and  all
       operands	modified by
	      the expression (if any).

	  Every	 expression  required to be equality preserving	is further re-
       quired to be
	  stable: two evaluations of such an expression	with  the  same	 input
       objects must have
	  equal	 outputs absent	any explicit intervening modification of those
       input objects.

	  Unless noted otherwise, every	expression used	in a  requires-expres-
       sion is required
	  to  be equality preserving and stable, and the evaluation of the ex-
       pression	may only
	  modify its non-constant operands. Operands that  are	constant  must
       not be modified.

	 Implicit expression variations

	  A  requires-expression that uses an expression that is non-modifying
       for some
	  constant lvalue operand also implicitly requires  additional	varia-
       tions of	that
	  expression  that accept a non-constant lvalue	or (possibly constant)
       rvalue for the
	  given	operand	unless such an expression variation is explicitly  re-
       quired with
	  differing  semantics.	These implicit expression variations must meet
       the same
	  semantic requirements	of the	declared  expression.  The  extent  to
       which an
	  implementation  validates  the  syntax of the	variations is unspeci-
       fied.

Notes
	  Examples of Boolean types include bool, std::true_type, and
	  std::bitset<N>::reference. Pointers are not Boolean types.

	  A deduction constraint of the	form { expression } ->	Same<T>&&  ef-
       fectively requires
	  decltype((expression))&& to be the exact same	type as	T&&. This con-
       strains both the
	  expression's type and	its value category.

http://cppreference.com		  2022.07.31	  std::experi...es::Boolean(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::experimental::ranges::Boolean&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help