std::ranges:: iter_move
| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Defined in header
<iterator>
|
||
|
inline
namespace
/* unspecified */
{
inline
constexpr
/* unspecified */
iter_move
=
/* unspecified */
;
|
(since C++20)
(customization point object) |
|
|
Call signature
|
||
|
template
<
class
T
>
requires
/* see below */
|
(since C++20) | |
Obtains an rvalue reference or a prvalue temporary from a given iterator.
A ranges :: iter_move ( t ) is expression-equivalent to:
-
iter_move
(
t
)
, if
t
has a class or enumeration type and the expression is well-formed when treated as an
unevaluated operand
, where the
overload resolution
of
iter_moveis performed only with the candidates found by argument-dependent lookup . - Otherwise, std :: move ( * t ) if * t is well-formed and is an lvalue.
- Otherwise, * t if * t is well-formed and is an rvalue.
In all other cases, a call to
ranges::iter_move
is ill-formed, which can result in
substitution failure
when
ranges
::
iter_move
(
e
)
appears in the immediate context of a template instantiation.
If ranges :: iter_move ( e ) is not equal to * e , the program is ill-formed, no diagnostic required.
Customization point objects
The name
ranges::iter_move
denotes a
customization point object
, which is a const
function object
of a
literal
semiregular
class type. See
CustomizationPointObject
for details.
Example
|
This section is incomplete
Reason: no example |
See also
|
(C++20)
|
casts the result of dereferencing the adjusted underlying iterator to its associated rvalue reference type
(function) |
|
(C++20)
|
casts the result of dereferencing the underlying iterator to its associated rvalue reference type
(function) |