| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Non-member functions | ||||
(C++20)(C++20) | ||||
(C++20) | ||||
(C++20) | ||||
iter_move (C++20) | ||||
(C++20) | ||||
| Helper classes | ||||
friendconstexpr decltype(auto) iter_move(conststd::counted_iterator& i) noexcept(noexcept(ranges::iter_move(i.base()))) | (since C++20) | |
Casts the result of dereferencing the underlying iterator to its associated rvalue reference type.
The function body is equivalent toreturnranges::iter_move(i.base());.
This function is not visible to ordinaryunqualified orqualified lookup, and can only be found byargument-dependent lookup whenstd::counted_iterator<I> is an associated class of the arguments.
Ifi.count() is equal to0, the behavior is undefined.
Contents |
| i | - | a source iterator adaptor |
An rvalue reference or a prvalue temporary.
Constant.
#include <iomanip>#include <iostream>#include <iterator>#include <string>#include <vector> void print(autoconst& rem,autoconst& v){std::cout<< rem<<'['<< size(v)<<"] {";for(char comma[]{0,' ',0};autoconst& s: v)std::cout<< comma<<std::quoted(s),*comma=',';std::cout<<"}\n";} int main(){std::vector<std::string> p{"Alpha","Bravo","Charlie"}, q; print("p", p); print("q", q); using RI=std::counted_iterator<std::vector<std::string>::iterator>; for(RI iter{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"}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 wasstd::iter_rvalue_reference_t<I> | changed todecltype(auto) |
(C++20) | casts the result of dereferencing an object to its associated rvalue reference type (customization point object)[edit] |
(C++20) | swaps the objects pointed to by two underlying iterators (function template)[edit] |
(C++11) | converts the argument to an xvalue (function template)[edit] |
(C++11) | converts the argument to an xvalue if the move constructor does not throw (function template)[edit] |
(C++11) | forwards a function argument and use the type template argument to preserve its value category (function template)[edit] |
(C++20) | moves a range of elements to a new location (algorithm function object)[edit] |
(C++20) | moves a range of elements to a new location in backwards order (algorithm function object)[edit] |