iter_move(std::counted_iterator)

From cppreference.com
 
 
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
Utilities
(C++20)
Iterator adaptors
Stream iterators
Iterator customization points
Iterator operations
(C++11)
(C++11)
Range access
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
 
friend constexpr std::iter_rvalue_reference_t<I>

  iter_move( const std::counted_iterator& i )
    noexcept(noexcept(ranges::iter_move(i.base())))

      requires std::input_iterator<I>;
(since C++20)

Casts the result of dereferencing the underlying iterator to its associated rvalue reference type. The behavior is undefined if i.count() is equal to 0.

The function body is equivalent to return ranges::iter_move(i.base());.

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

#include <iomanip>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
 
void print(auto const& rem, auto const& v) {
    for (std::cout << rem << "[" << size(v) << "] { "; auto const& s : v)
        std::cout << quoted(s) << " ";
    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" }

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)
obtains an rvalue reference
(function template)
obtains an rvalue reference if the move constructor does not throw
(function template)
(C++11)
forwards a function argument
(function template)
moves a range of elements to a new location
(niebloid)
moves a range of elements to a new location in backwards order
(niebloid)