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

FreeBSD Manual Pages

  
 
  

home | help
std::experi...es::Writable(3) C++ Standard Libarystd::experi...es::Writable(3)

NAME
       std::experimental::ranges::Writable	    -	       std::experimen-
       tal::ranges::Writable

Synopsis
	  Defined in header <experimental/ranges/iterator>
	  template< class Out, class T >

	  concept bool Writable	=
	  requires(Out&& o, T&&	t) {
	  *o = std::forward<T>(t);
	  *std::forward<Out>(o)	= std::forward<T>(t);
	  const_cast<const	    ranges::reference_t<Out>&&>(*o)	     =
       (ranges TS)
	  std::forward<T>(t);
	  const_cast<const  ranges::reference_t<Out>&&>(*std::forward<Out>(o))
       =
	  std::forward<T>(t);
	  };

	  /* none of the four expressions above	are required to	be
	  equality-preserving */

	  The concept Writable<Out, T> specifies the requirements for  writing
       a value whose
	  type and value category are encoded by T into	an iterator Out's ref-
       erenced object.

	  Let  E  be  an  expression  such that	decltype((E)) is T, and	o be a
       dereferenceable
	  object of type Out, then Writable<Out, T> is satisfied only if:

	    * If  Readable<Out>	 &&  Same<ranges::value_type_t<Out>,  std::de-
       cay_t<T>> is
	      satisfied,  then	*o  after any above assignment is equal	to the
       value of	E before
	      the assignment.

	  o is not required to be dereferenceable after	evaluating any of  the
       assignment
	  expressions above. If	E is an	xvalue,	the resulting state of the ob-
       ject it denotes
	  is valid but unspecified.

	 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.

Notes
	  The only valid use of	operator* is on	the left side of an assignment
       expression.
	  Assignment through the same value of a writable type may happen only
       once.

	  The required expressions with	const_cast  prevent  Readable  objects
       with prvalue
	  reference  types  from  satisfying  the  syntactic  requirements  of
       Writable	by accident,
	  while	permitting proxy references to continue	to  work  as  long  as
       their constness is
	  shallow. See Ranges TS issue 381.

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

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

home | help