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

FreeBSD Manual Pages

  
 
  

home | help
std::indire...le_storable(3)  C++ Standard Libary std::indire...le_storable(3)

NAME
       std::indirectly_movable_storable	- std::indirectly_movable_storable

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

	  concept indirectly_movable_storable =
	  std::indirectly_movable<In, Out> &&
	  std::indirectly_writable<Out,	std::iter_value_t<In>> &&
	  std::movable<std::iter_value_t<In>>				    &&
       (since C++20)
	  std::constructible_from<std::iter_value_t<In>,
	  std::iter_rvalue_reference_t<In>> &&

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

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

	 Semantic requirements

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

	    *	   After      the	definition	 std::iter_value_t<In>
       obj(ranges::iter_move(i));, obj is
	      equal to the value previously denoted by *i, and
	    * if std::iter_rvalue_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_movable	       specifies that values may be moved from
       an
	  (C++20)		       indirectly_readable type	 to  an	 indi-
       rectly_writable type
				       (concept)
				       specifies  that	values	may  be	copied
       from an
	  indirectly_copyable_storable indirectly_readable type	 to  an	 indi-
       rectly_writable type
	  (C++20)			and that the copy may be performed via
       an intermediate
				       object
				       (concept)

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

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

home | help