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

FreeBSD Manual Pages

  
 
  

home | help
std::indire...ble_storable(3) C++ Standard Libarystd::indire...ble_storable(3)

NAME
       std::indirectly_copyable_storable - std::indirectly_copyable_storable

Synopsis
	  Defined in header <iterator>
	  template<class In, class Out>

	  concept indirectly_copyable_storable =
	  std::indirectly_copyable<In, Out> &&
	  std::indirectly_writable<Out,	std::iter_value_t<In>&>	&&
	  std::indirectly_writable<Out,	const std::iter_value_t<In>&> &&
	  std::indirectly_writable<Out,	      std::iter_value_t<In>&&>	    &&
       (since C++20)
	  std::indirectly_writable<Out,	const std::iter_value_t<In>&&> &&
	  std::copyable<std::iter_value_t<In>> &&
	  std::constructible_from<std::iter_value_t<In>,
	  std::iter_reference_t<In>> &&

	  std::assignable_from<std::iter_value_t<In>&,
	  std::iter_reference_t<In>>;

	  The indirectly_copyable_storable concept specifies the  relationship
       between an
	  indirectly_readable  type  and an indirectly_writable	type. In addi-
       tion to
	  indirectly_copyable, this concept specifies that the copy from the
	  indirectly_readable type can be performed via	 an  intermediate  ob-
       ject.

	 Semantic requirements

	  In  and Out model std::indirectly_copyable_storable<In, Out> only if
       given a
	  dereferenceable value	i of type In:

	    * After the	 definition  std::iter_value_t<In>  obj(*i);,  obj  is
       equal to	the value
	      previously denoted by *i,	and
	    *  if std::iter_reference_t<In> is an rvalue reference type, *i is
       placed in a
	      valid but	unspecified state after	the initialization of obj.

	 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).

	  In specification of standard concepts, operands are defined  as  the
       largest
	  subexpressions that include only:

	    * an id-expression,	and
	    * invocations of std::move,	std::forward, and std::declval.

	  The  cv-qualification	 and  value category of	each operand is	deter-
       mined by	assuming
	  that each template type parameter denotes a cv-unqualified  complete
       non-array object
	  type.

	  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
	  modify only its non-constant operands. Operands  that	 are  constant
       must not	be
	  modified.

See also
	  indirectly_copyable	      specifies	that values may	be copied from
       an
	  (C++20)		       indirectly_readable  type  to  an indi-
       rectly_writable type
				      (concept)
				      specifies	that values may	be moved  from
       an
	  indirectly_movable_storable  indirectly_readable  type  to  an indi-
       rectly_writable type
	  (C++20)		      and that the move	may be	performed  via
       an intermediate
				      object
				      (concept)

http://cppreference.com		  2022.07.31	 std::indire...ble_storable(3)

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

home | help