Files
cppdraft_translate/cppdraft/alg/req/ind/copy.md
2025-10-25 03:02:53 +03:00

4.3 KiB

[alg.req.ind.copy]

24 Iterators library [iterators]

24.3 Iterator requirements [iterator.requirements]

24.3.7 Common algorithm requirements [alg.req]

24.3.7.3 Concept indirectly_copyable [alg.req.ind.copy]

1

#

The indirectly_copyable concept specifies the relationship between an indirectly_readable type and an indirectly_writable type between which values may be copied.

template<class In, class Out>concept indirectly_copyable =indirectly_readable &&indirectly_writable<Out, iter_reference_t>;

2

#

The indirectly_copyable_storable concept augmentsindirectly_copyable with additional requirements enabling the transfer to be performed through an intermediate object of theindirectly_readable type's value type.

It also requires the capability to make copies of values.

template<class In, class Out>concept indirectly_copyable_storable =indirectly_copyable<In, Out> &&indirectly_writable<Out, iter_value_t&> &&indirectly_writable<Out, const iter_value_t&> &&indirectly_writable<Out, iter_value_t&&> &&indirectly_writable<Out, const iter_value_t&&> &&copyable<iter_value_t> &&constructible_from<iter_value_t, iter_reference_t> &&assignable_from<iter_value_t&, iter_reference_t>;

3

#

Let i be a dereferenceable value of type In.

In and Out model indirectly_copyable_storable<In, Out> only if after the initialization of the object obj initer_value_t obj(*i);obj is equal to the value previously denoted by *i.

Ifiter_reference_t is an rvalue reference type, the resulting state of the value denoted by *i is valid but unspecified ([lib.types.movedfrom]).