Skip to content

P1207R4 Movability of Single-pass Iterators #3049

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 6, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 42 additions & 7 deletions source/iterators.tex
Original file line number Diff line number Diff line change
Expand Up @@ -1282,7 +1282,7 @@
\begin{codeblock}
template<class I>
concept WeaklyIncrementable =
Semiregular<I> &&
DefaultConstructible<I> && Movable<I> &&
requires(I i) {
typename iter_difference_t<I>;
requires SignedIntegral<iter_difference_t<I>>;
Expand Down Expand Up @@ -1379,6 +1379,12 @@
WeaklyIncrementable<I>;
\end{codeblock}

\pnum
\begin{note}
Unlike the \oldconcept{Iterator} requirements,
the \libconcept{Iterator} concept does not require copyability.
\end{note}

\rSec3[iterator.concept.sentinel]{Concept \tcode{Sentinel}}

\pnum
Expand Down Expand Up @@ -1548,7 +1554,8 @@
\rSec3[iterator.concept.forward]{Concept \tcode{ForwardIterator}}

\pnum
The \libconcept{ForwardIterator} concept adds equality comparison and
The \libconcept{ForwardIterator} concept adds
copyability, equality comparison, and
the multi-pass guarantee, specified below.

\indexlibrary{\idxcode{ForwardIterator}}%
Expand Down Expand Up @@ -3946,7 +3953,8 @@
template<class U> constexpr move_iterator(const move_iterator<U>& u);
template<class U> constexpr move_iterator& operator=(const move_iterator<U>& u);

constexpr iterator_type base() const;
constexpr iterator_type base() const &;
constexpr iterator_type base() &&;
constexpr reference operator*() const;

constexpr move_iterator& operator++();
Expand Down Expand Up @@ -4035,7 +4043,7 @@
\begin{itemdescr}
\pnum
\effects Constructs a \tcode{move_iterator}, initializing
\tcode{current} with \tcode{i}.
\tcode{current} with \tcode{std::move(i)}.
\end{itemdescr}


Expand Down Expand Up @@ -4071,14 +4079,30 @@

\indexlibrarymember{base}{move_iterator}%
\begin{itemdecl}
constexpr Iterator base() const;
constexpr Iterator base() const &;
\end{itemdecl}

\begin{itemdescr}
\pnum
\constraints \tcode{Iterator} satisfies \libconcept{CopyConstructible}.

\pnum
\expects \tcode{Iterator} models \libconcept{CopyConstructible}.

\pnum
\returns \tcode{current}.
\end{itemdescr}

\indexlibrarymember{base}{move_iterator}%
\begin{itemdecl}
constexpr Iterator base() &&;
\end{itemdecl}

\begin{itemdescr}
\pnum
\returns \tcode{std::move(current)}.
\end{itemdescr}

\rSec3[move.iter.elem]{Element access}

\indexlibrarymember{operator*}{move_iterator}%
Expand Down Expand Up @@ -4944,7 +4968,8 @@
requires Assignable<I&, const I2&>
constexpr counted_iterator& operator=(const counted_iterator<I2>& x);

constexpr I base() const;
constexpr I base() const & requires CopyConstructible<I>;
constexpr I base() &&;
constexpr iter_difference_t<I> count() const noexcept;
constexpr decltype(auto) operator*();
constexpr decltype(auto) operator*() const
Expand Down Expand Up @@ -5068,14 +5093,24 @@

\indexlibrarymember{base}{counted_iterator}%
\begin{itemdecl}
constexpr I base() const;
constexpr I base() const & requires CopyConstructible<I>;
\end{itemdecl}

\begin{itemdescr}
\pnum
\effects Equivalent to: \tcode{return current;}
\end{itemdescr}

\indexlibrarymember{base}{counted_iterator}%
\begin{itemdecl}
constexpr I base() &&;
\end{itemdecl}

\begin{itemdescr}
\pnum
\returns \tcode{std::move(current)}.
\end{itemdescr}

\indexlibrarymember{count}{counted_iterator}%
\begin{itemdecl}
constexpr iter_difference_t<I> count() const noexcept;
Expand Down