Skip to content

Commit 082e455

Browse files
Dawn Perchikzygoloid
authored andcommitted
P1207R4 Movability of Single-pass Iterators
Fixes #3026.
1 parent 4246acb commit 082e455

File tree

1 file changed

+42
-7
lines changed

1 file changed

+42
-7
lines changed

source/iterators.tex

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1282,7 +1282,7 @@
12821282
\begin{codeblock}
12831283
template<class I>
12841284
concept WeaklyIncrementable =
1285-
Semiregular<I> &&
1285+
DefaultConstructible<I> && Movable<I> &&
12861286
requires(I i) {
12871287
typename iter_difference_t<I>;
12881288
requires SignedIntegral<iter_difference_t<I>>;
@@ -1379,6 +1379,12 @@
13791379
WeaklyIncrementable<I>;
13801380
\end{codeblock}
13811381

1382+
\pnum
1383+
\begin{note}
1384+
Unlike the \oldconcept{Iterator} requirements,
1385+
the \libconcept{Iterator} concept does not require copyability.
1386+
\end{note}
1387+
13821388
\rSec3[iterator.concept.sentinel]{Concept \tcode{Sentinel}}
13831389

13841390
\pnum
@@ -1548,7 +1554,8 @@
15481554
\rSec3[iterator.concept.forward]{Concept \tcode{ForwardIterator}}
15491555

15501556
\pnum
1551-
The \libconcept{ForwardIterator} concept adds equality comparison and
1557+
The \libconcept{ForwardIterator} concept adds
1558+
copyability, equality comparison, and
15521559
the multi-pass guarantee, specified below.
15531560

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

3949-
constexpr iterator_type base() const;
3956+
constexpr iterator_type base() const &;
3957+
constexpr iterator_type base() &&;
39503958
constexpr reference operator*() const;
39513959

39523960
constexpr move_iterator& operator++();
@@ -4035,7 +4043,7 @@
40354043
\begin{itemdescr}
40364044
\pnum
40374045
\effects Constructs a \tcode{move_iterator}, initializing
4038-
\tcode{current} with \tcode{i}.
4046+
\tcode{current} with \tcode{std::move(i)}.
40394047
\end{itemdescr}
40404048

40414049

@@ -4071,14 +4079,30 @@
40714079

40724080
\indexlibrarymember{base}{move_iterator}%
40734081
\begin{itemdecl}
4074-
constexpr Iterator base() const;
4082+
constexpr Iterator base() const &;
40754083
\end{itemdecl}
40764084

40774085
\begin{itemdescr}
4086+
\pnum
4087+
\constraints \tcode{Iterator} satisfies \libconcept{CopyConstructible}.
4088+
4089+
\pnum
4090+
\expects \tcode{Iterator} models \libconcept{CopyConstructible}.
4091+
40784092
\pnum
40794093
\returns \tcode{current}.
40804094
\end{itemdescr}
40814095

4096+
\indexlibrarymember{base}{move_iterator}%
4097+
\begin{itemdecl}
4098+
constexpr Iterator base() &&;
4099+
\end{itemdecl}
4100+
4101+
\begin{itemdescr}
4102+
\pnum
4103+
\returns \tcode{std::move(current)}.
4104+
\end{itemdescr}
4105+
40824106
\rSec3[move.iter.elem]{Element access}
40834107

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

4947-
constexpr I base() const;
4971+
constexpr I base() const & requires CopyConstructible<I>;
4972+
constexpr I base() &&;
49484973
constexpr iter_difference_t<I> count() const noexcept;
49494974
constexpr decltype(auto) operator*();
49504975
constexpr decltype(auto) operator*() const
@@ -5068,14 +5093,24 @@
50685093

50695094
\indexlibrarymember{base}{counted_iterator}%
50705095
\begin{itemdecl}
5071-
constexpr I base() const;
5096+
constexpr I base() const & requires CopyConstructible<I>;
50725097
\end{itemdecl}
50735098

50745099
\begin{itemdescr}
50755100
\pnum
50765101
\effects Equivalent to: \tcode{return current;}
50775102
\end{itemdescr}
50785103

5104+
\indexlibrarymember{base}{counted_iterator}%
5105+
\begin{itemdecl}
5106+
constexpr I base() &&;
5107+
\end{itemdecl}
5108+
5109+
\begin{itemdescr}
5110+
\pnum
5111+
\returns \tcode{std::move(current)}.
5112+
\end{itemdescr}
5113+
50795114
\indexlibrarymember{count}{counted_iterator}%
50805115
\begin{itemdecl}
50815116
constexpr iter_difference_t<I> count() const noexcept;

0 commit comments

Comments
 (0)