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		  2024.06.10	  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.1.quarterly>

home | help