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
, a
occurs.
If the implementation is not hardened, the behavior is undefined.
(since C++26)This function is not visible to ordinary
or
, and can only be found by
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
C++20 the return type was std::iter_rvalue_reference_t<I>changed to decltype(auto)See also
(C++20)
casts the result of dereferencing an object to its associated rvalue reference type
(customization point object)
(C++20)
swaps the objects pointed to by two underlying iterators
(function template)
(C++11)
converts the argument to an xvalue
(function template)
(C++11)
converts the argument to an xvalue if the move constructor does not throw
(function template)
(C++11)
forwards a function argument and use the type template argument to preserve its value category
(function template)
(C++20)
moves a range of elements to a new location
(algorithm function object)
(C++20)
moves a range of elements to a new location in backwards order
(algorithm function object)