---
name: "std::move_iterator"
section: "3cxx"
platform: "linux"
package: "libstdc++-12-doc"
version: "12.4.0-5"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/std::move_iterator/3cxx"
---

# std::move\_iterator(3cxx)

## NAME

std::move\_iterator\< \_Iterator \>

## SYNOPSIS

`#include <iterator>`

Inherits std::\_\_detail::\_\_move\_iter\_cat\< \_Iterator \>.

### Public Types

**using** **difference\_type** = iter\_difference\_t\< \_Iterator \>\
 **using** **iterator\_concept** = **decltype**(\_S\_iter\_concept())\
 **using** **iterator\_type** = \_Iterator\
 **using** **pointer** = \_Iterator\
 **using** **reference** = iter\_rvalue\_reference\_t\< \_Iterator \>\
 **using** **value\_type** = iter\_value\_t\< \_Iterator \>\

### Public Member Functions

template\<**typename** \_Iter \> \
 requires \_\_convertible\<\_Iter\>constexpr **move\_iterator** (const **move\_iterator**\< \_Iter \> &\_\_i)"\
 constexpr **move\_iterator** (iterator\_type \_\_i)\
 constexpr iterator\_type **base** () &&\
 constexpr const iterator\_type & **base** () const &noexcept\
 constexpr **reference** **operator\*** () const\
 constexpr **move\_iterator** **operator+** (**difference\_type** \_\_n) const\
 constexpr **move\_iterator** & **operator++** ()\
 constexpr **move\_iterator** **operator++** (int)\
 constexpr **void** **operator++** (int)\
 constexpr **move\_iterator** & **operator+=** (**difference\_type** \_\_n)\
 constexpr **move\_iterator** **operator-** (**difference\_type** \_\_n) const\
 constexpr **move\_iterator** & **operator--** ()\
 constexpr **move\_iterator** **operator--** (int)\
 constexpr **move\_iterator** & **operator-=** (**difference\_type** \_\_n)\
 constexpr pointer **operator-\>** () const\
 template\<**typename** \_Iter \> \
 requires \_\_convertible\<\_Iter\> && assignable\_from\<\_Iterator&, const \_Iter&\>constexpr **move\_iterator** & **operator=** (const **move\_iterator**\< \_Iter \> &\_\_i)"\
 constexpr **reference** **operator\[\]** (**difference\_type** \_\_n) const\

### Friends

constexpr iter\_rvalue\_reference\_t\< \_Iterator \> **iter\_move** (const **move\_iterator** &\_\_i) noexcept(noexcept(ranges::iter\_move(\_\_i.\_M\_current)))\
 template\<indirectly\_swappable\< \_Iterator \> \_Iter2\> constexpr **void** **iter\_swap** (const **move\_iterator** &\_\_x, const **move\_iterator**\< \_Iter2 \> &\_\_y) noexcept(noexcept(ranges::iter\_swap(\_\_x.\_M\_current, \_\_y.\_M\_current)))\
 template\<sized\_sentinel\_for\< \_Iterator \> \_Sent\> constexpr iter\_difference\_t\< \_Iterator \> **operator-** (const **move\_iterator** &\_\_x, const move\_sentinel\< \_Sent \> &\_\_y)\
 template\<sized\_sentinel\_for\< \_Iterator \> \_Sent\> constexpr iter\_difference\_t\< \_Iterator \> **operator-** (const move\_sentinel\< \_Sent \> &\_\_x, const **move\_iterator** &\_\_y)\
 template\<sentinel\_for\< \_Iterator \> \_Sent\> constexpr bool **operator==** (const **move\_iterator** &\_\_x, const move\_sentinel\< \_Sent \> &\_\_y)\

## Detailed Description

### template\<typename \_Iterator\>

class std::move\_iterator\< \_Iterator \>"Class template move\_iterator is an iterator adapter with the same behavior as the underlying iterator except that its dereference operator implicitly converts the value returned by the underlying iterator's dereference operator to an rvalue reference. Some generic algorithms can be called with move iterators to replace copying with moving.

## Author

Generated automatically by Doxygen for libstdc++ from the source code.
