iter_move(std::counted_iterator) - cppreference.com

From cppreference.com

friendconstexprdecltype(auto)iter_move(conststd::counted_iterator&i)noexcept(noexcept(ranges::iter_move(i.base())))requiresstd::input_iterator<I>;(since C++20)Casts the result of dereferencing the underlying iterator to its associated rvalue reference type.

Equivalent to returnranges::iter_move(i.base());.

If i.count()>0 is false, the behavior is undefined.

(until C++26)If i.count()>0 is false:

If the implementation is

hardened

, a

contract violation

occurs.

If the implementation is not hardened, the behavior is undefined.

(since C++26)This function is not visible to ordinary

unqualified

or

qualified lookup

, and can only be found by

argument-dependent lookup

when std::counted_iterator<I> is an associated class of the arguments.

Parameters

i - a source iterator adaptor Return value

An rvalue reference or a prvalue temporary.

Complexity

Constant.

Example

Run this code

#include<iomanip>#include<iostream>#include<iterator>#include<string>#include<vector>voidprint(constauto&rem,constauto&v){std::cout<<rem<<'['<<size(v)<<"] {";for(charcomma[]{0,' ',0};constauto&s:v)std::cout<<comma<<std::quoted(s),*comma=',';std::cout<<"}\n";}intmain(){std::vector<std::string>p{"Alpha","Bravo","Charlie"},q;print("p",p);print("q",q);usingRI=std::counted_iterator<std::vector<std::string>::iterator>;for(RIiter{p.begin(),2};iter!=std::default_sentinel;++iter)q.emplace_back(/* ADL */iter_move(iter));print("p",p);print("q",q);}Possible output:

p[3] {"Alpha", "Bravo", "Charlie"} q[0] {} p[3] {"", "", "Charlie"} q[2] {"Alpha", "Bravo"} Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior

LWG 3953

C++20 the return type was std::iter_rvalue_reference_t<I>changed to decltype(auto)See also

ranges::iter_move

(C++20)

casts the result of dereferencing an object to its associated rvalue reference type
(customization point object)

[edit]

iter_swap

(C++20)

swaps the objects pointed to by two underlying iterators
(function template)

[edit]

move

(C++11)

converts the argument to an xvalue
(function template)

[edit]

move_if_noexcept

(C++11)

converts the argument to an xvalue if the move constructor does not throw
(function template)

[edit]

forward

(C++11)

forwards a function argument and use the type template argument to preserve its value category
(function template)

[edit]

ranges::move

(C++20)

moves a range of elements to a new location
(algorithm function object)

[edit]

ranges::move_backward

(C++20)

moves a range of elements to a new location in backwards order
(algorithm function object)

[edit]