| 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) | ||||
iter_move (C++20) | ||||
(C++20) | ||||
| Helper classes | ||||
friendconstexpr decltype(auto) iter_move(conststd::common_iterator& i) noexcept(noexcept(ranges::iter_move(std::declval<const I&>())) | (since C++20) | |
Casts the result of dereferencing the underlying iterator to its associated rvalue reference type.
The function body is equivalent to:return std::ranges::iter_move(std::get<I>(i.var));.
This function is not visible to ordinaryunqualified orqualified lookup, and can only be found byargument-dependent lookup whenstd::common_iterator<I, S> is an associated class of the arguments.
Ifi.var does not hold anI object (i.e. an iterator), 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(int o{};autoconst& s: v)std::cout<<(o++?", ":"")<<std::quoted(s);std::cout<<" }\n";} int main(){std::vector<std::string> p{"Andromeda","Cassiopeia","Phoenix"}, q; print("p", p); print("q", q); using CTI=std::counted_iterator<std::vector<std::string>::iterator>;using CI=std::common_iterator<CTI,std::default_sentinel_t>; CI last{std::default_sentinel}; for(CI first{{p.begin(),2}}; first!= last;++first) q.emplace_back(/* ADL */ iter_move(first)); print("p", p); print("q", q);}
Possible output:
p[3] { "Andromeda", "Cassiopeia", "Phoenix" }q[0] { }p[3] { "", "", "Phoenix" }q[2] { "Andromeda", "Cassiopeia" }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) | casts the result of dereferencing the underlying iterator to its associated rvalue reference type (function)[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] |