From Jason Turner

[iterator.cust.move]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmp6awssyj1/{from.md → to.md} +24 -0
tmp/tmp6awssyj1/{from.md → to.md} RENAMED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #### `ranges::iter_move` <a id="iterator.cust.move">[[iterator.cust.move]]</a>
2
+
3
+ The name `ranges::iter_move` denotes a customization point object
4
+ [[customization.point.object]]. The expression `ranges::iter_move(E)`
5
+ for a subexpression `E` is expression-equivalent to:
6
+
7
+ - `iter_move(E)`, if `E` has class or enumeration type and
8
+ `iter_move(E)` is a well-formed expression when treated as an
9
+ unevaluated operand, with overload resolution performed in a context
10
+ that does not include a declaration of `ranges::iter_move` but does
11
+ include the declaration
12
+ ``` cpp
13
+ void iter_move();
14
+ ```
15
+ - Otherwise, if the expression `*E` is well-formed:
16
+ - if `*E` is an lvalue, `std::move(*E)`;
17
+ - otherwise, `*E`.
18
+ - Otherwise, `ranges::iter_move(E)` is ill-formed. \[*Note 1*: This case
19
+ can result in substitution failure when `ranges::iter_move(E)` appears
20
+ in the immediate context of a template instantiation. — *end note*]
21
+
22
+ If `ranges::iter_move(E)` is not equal to `*E`, the program is
23
+ ill-formed, no diagnostic required.
24
+