Skip to content

Commit d3fa0b6

Browse files
author
Dawn Perchik
committed
P1207R4 Movability of Single-pass Iterators
Fixes #3026.
1 parent 67db942 commit d3fa0b6

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
@@ -1283,7 +1283,7 @@
12831283
\begin{codeblock}
12841284
template<class I>
12851285
concept WeaklyIncrementable =
1286-
Semiregular<I> &&
1286+
DefaultConstructible<I> && Movable<I> &&
12871287
requires(I i) {
12881288
typename iter_difference_t<I>;
12891289
requires SignedIntegral<iter_difference_t<I>>;
@@ -1380,6 +1380,12 @@
13801380
WeaklyIncrementable<I>;
13811381
\end{codeblock}
13821382

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

13851391
\pnum
@@ -1531,7 +1537,8 @@
15311537
\rSec3[iterator.concept.forward]{Concept \tcode{ForwardIterator}}
15321538

15331539
\pnum
1534-
The \libconcept{ForwardIterator} concept adds equality comparison and
1540+
The \libconcept{ForwardIterator} concept adds
1541+
copyability, equality comparison, and
15351542
the multi-pass guarantee, specified below.
15361543

15371544
\indexlibrary{\idxcode{ForwardIterator}}%
@@ -3909,7 +3916,8 @@
39093916
template<class U> constexpr move_iterator(const move_iterator<U>& u);
39103917
template<class U> constexpr move_iterator& operator=(const move_iterator<U>& u);
39113918

3912-
constexpr iterator_type base() const;
3919+
constexpr iterator_type base() const &;
3920+
constexpr iterator_type base() &&;
39133921
constexpr reference operator*() const;
39143922

39153923
constexpr move_iterator& operator++();
@@ -4007,7 +4015,7 @@
40074015
\begin{itemdescr}
40084016
\pnum
40094017
\effects Constructs a \tcode{move_iterator}, initializing
4010-
\tcode{current} with \tcode{i}.
4018+
\tcode{current} with \tcode{std::move(i)}.
40114019
\end{itemdescr}
40124020

40134021

@@ -4043,14 +4051,30 @@
40434051

40444052
\indexlibrarymember{base}{move_iterator}%
40454053
\begin{itemdecl}
4046-
constexpr Iterator base() const;
4054+
constexpr Iterator base() const &;
40474055
\end{itemdecl}
40484056

40494057
\begin{itemdescr}
4058+
\pnum
4059+
\constraints \tcode{Iterator} satisfies \tcode{CopyConstructible}.
4060+
4061+
\pnum
4062+
\effects \tcode{Iterator} models \tcode{CopyConstructible}.
4063+
40504064
\pnum
40514065
\returns \tcode{current}.
40524066
\end{itemdescr}
40534067

4068+
\indexlibrarymember{base}{move_iterator}%
4069+
\begin{itemdecl}
4070+
constexpr Iterator base() &&;
4071+
\end{itemdecl}
4072+
4073+
\begin{itemdescr}
4074+
\pnum
4075+
\returns \tcode{std::move(current)}.
4076+
\end{itemdescr}
4077+
40544078
\rSec3[move.iter.elem]{Element access}
40554079

40564080
\indexlibrarymember{operator*}{move_iterator}%
@@ -4945,7 +4969,8 @@
49454969
requires Assignable<I&, const I2&>
49464970
constexpr counted_iterator& operator=(const counted_iterator<I2>& x);
49474971

4948-
constexpr I base() const;
4972+
constexpr I base() const & requires CopyConstructible<I>;;
4973+
constexpr I base() &&;
49494974
constexpr iter_difference_t<I> count() const noexcept;
49504975
constexpr decltype(auto) operator*();
49514976
constexpr decltype(auto) operator*() const
@@ -5088,14 +5113,24 @@
50885113

50895114
\indexlibrarymember{base}{counted_iterator}%
50905115
\begin{itemdecl}
5091-
constexpr I base() const;
5116+
constexpr I base() const & requires CopyConstructible<I>;
50925117
\end{itemdecl}
50935118

50945119
\begin{itemdescr}
50955120
\pnum
50965121
\effects Equivalent to: \tcode{return current;}
50975122
\end{itemdescr}
50985123

5124+
\indexlibrarymember{base}{counted_iterator}%
5125+
\begin{itemdecl}
5126+
constexpr I base() &&;
5127+
\end{itemdecl}
5128+
5129+
\begin{itemdescr}
5130+
\pnum
5131+
\returns \tcode{std::move(current)}.
5132+
\end{itemdescr}
5133+
50995134
\indexlibrarymember{count}{counted_iterator}%
51005135
\begin{itemdecl}
51015136
constexpr iter_difference_t<I> count() const noexcept;

0 commit comments

Comments
 (0)