3.7 KiB
[alg.req.ind.move]
24 Iterators library [iterators]
24.3 Iterator requirements [iterator.requirements]
24.3.7 Common algorithm requirements [alg.req]
24.3.7.2 Concept indirectly_movable [alg.req.ind.move]
The indirectly_movable concept specifies the relationship between an indirectly_readable type and an indirectly_writable type between which values may be moved.
template<class In, class Out>concept indirectly_movable =indirectly_readable &&indirectly_writable<Out, iter_rvalue_reference_t>;
The indirectly_movable_storable concept augmentsindirectly_movable with additional requirements enabling the transfer to be performed through an intermediate object of theindirectly_readable type's value type.
template<class In, class Out>concept indirectly_movable_storable =indirectly_movable<In, Out> &&indirectly_writable<Out, iter_value_t> &&movable<iter_value_t> &&constructible_from<iter_value_t, iter_rvalue_reference_t> &&assignable_from<iter_value_t&, iter_rvalue_reference_t>;
Let i be a dereferenceable value of type In.
In and Out model indirectly_movable_storable<In, Out> only if after the initialization of the object obj initer_value_t obj(ranges::iter_move(i));obj is equal to the value previously denoted by *i.
Ifiter_rvalue_reference_t is an rvalue reference type, the resulting state of the value denoted by *i is valid but unspecified ([lib.types.movedfrom]).