Namespaces
Variants
Actions

iter_move(std::common_iterator)

From cppreference.com
 
 
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
 
friendconstexpr decltype(auto) iter_move(conststd::common_iterator& i )

    noexcept(noexcept(ranges::iter_move(std::declval<const I&>()))

        requires std::input_iterator<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 ordinary unqualified or qualified lookup, and can only be found by argument-dependent lookup when std::common_iterator<I, S> is an associated class of the arguments.

If i.var does not hold an I object (i.e. an iterator), the behavior is undefined.

Contents

[edit]Parameters

i - a source iterator adaptor

[edit]Return value

An rvalue reference or a prvalue temporary.

[edit]Complexity

Constant.

[edit]Example

#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" }

[edit]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 3953C++20 the return type was std::iter_rvalue_reference_t<I>changed to decltype(auto)

[edit]See also

(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]
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]
moves a range of elements to a new location
(algorithm function object)[edit]
moves a range of elements to a new location in backwards order
(algorithm function object)[edit]
close