From Jason Turner

[alg.req.ind.move]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmp24_w7mo9/{from.md → to.md} +41 -0
tmp/tmp24_w7mo9/{from.md → to.md} RENAMED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #### Concept <a id="alg.req.ind.move">[[alg.req.ind.move]]</a>
2
+
3
+ The `indirectly_movable` concept specifies the relationship between a
4
+ `indirectly_readable` type and a `indirectly_writable` type between
5
+ which values may be moved.
6
+
7
+ ``` cpp
8
+ template<class In, class Out>
9
+ concept indirectly_movable =
10
+ indirectly_readable<In> &&
11
+ indirectly_writable<Out, iter_rvalue_reference_t<In>>;
12
+ ```
13
+
14
+ The `indirectly_movable_storable` concept augments `indirectly_movable`
15
+ with additional requirements enabling the transfer to be performed
16
+ through an intermediate object of the `indirectly_readable` type’s value
17
+ type.
18
+
19
+ ``` cpp
20
+ template<class In, class Out>
21
+ concept indirectly_movable_storable =
22
+ indirectly_movable<In, Out> &&
23
+ indirectly_writable<Out, iter_value_t<In>> &&
24
+ movable<iter_value_t<In>> &&
25
+ constructible_from<iter_value_t<In>, iter_rvalue_reference_t<In>> &&
26
+ assignable_from<iter_value_t<In>&, iter_rvalue_reference_t<In>>;
27
+ ```
28
+
29
+ Let `i` be a dereferenceable value of type `In`. `In` and `Out` model
30
+ `indirectly_movable_storable<In, Out>` only if after the initialization
31
+ of the object `obj` in
32
+
33
+ ``` cpp
34
+ iter_value_t<In> obj(ranges::iter_move(i));
35
+ ```
36
+
37
+ `obj` is equal to the value previously denoted by `*i`. If
38
+ `iter_rvalue_reference_t<In>` is an rvalue reference type, the resulting
39
+ state of the value denoted by `*i` is valid but unspecified
40
+ [[lib.types.movedfrom]].
41
+