|
1283 | 1283 | \begin{codeblock}
|
1284 | 1284 | template<class I>
|
1285 | 1285 | concept WeaklyIncrementable =
|
1286 |
| - Semiregular<I> && |
| 1286 | + DefaultConstructible<I> && Movable<I> && |
1287 | 1287 | requires(I i) {
|
1288 | 1288 | typename iter_difference_t<I>;
|
1289 | 1289 | requires SignedIntegral<iter_difference_t<I>>;
|
|
1380 | 1380 | WeaklyIncrementable<I>;
|
1381 | 1381 | \end{codeblock}
|
1382 | 1382 |
|
| 1383 | +\pnum |
| 1384 | +\begin{note} |
| 1385 | +Unlike the \oldconcept{Iterator} requirements, |
| 1386 | +the \libconcept{Iterator} concept does not require copyability. |
| 1387 | +\end{note} |
| 1388 | + |
1383 | 1389 | \rSec3[iterator.concept.sentinel]{Concept \tcode{Sentinel}}
|
1384 | 1390 |
|
1385 | 1391 | \pnum
|
|
1531 | 1537 | \rSec3[iterator.concept.forward]{Concept \tcode{ForwardIterator}}
|
1532 | 1538 |
|
1533 | 1539 | \pnum
|
1534 |
| -The \libconcept{ForwardIterator} concept adds equality comparison and |
| 1540 | +The \libconcept{ForwardIterator} concept adds |
| 1541 | +copyability, equality comparison, and |
1535 | 1542 | the multi-pass guarantee, specified below.
|
1536 | 1543 |
|
1537 | 1544 | \indexlibrary{\idxcode{ForwardIterator}}%
|
|
3909 | 3916 | template<class U> constexpr move_iterator(const move_iterator<U>& u);
|
3910 | 3917 | template<class U> constexpr move_iterator& operator=(const move_iterator<U>& u);
|
3911 | 3918 |
|
3912 |
| - constexpr iterator_type base() const; |
| 3919 | + constexpr iterator_type base() const &; |
| 3920 | + constexpr iterator_type base() &&; |
3913 | 3921 | constexpr reference operator*() const;
|
3914 | 3922 |
|
3915 | 3923 | constexpr move_iterator& operator++();
|
|
4007 | 4015 | \begin{itemdescr}
|
4008 | 4016 | \pnum
|
4009 | 4017 | \effects Constructs a \tcode{move_iterator}, initializing
|
4010 |
| -\tcode{current} with \tcode{i}. |
| 4018 | +\tcode{current} with \tcode{std::move(i)}. |
4011 | 4019 | \end{itemdescr}
|
4012 | 4020 |
|
4013 | 4021 |
|
|
4043 | 4051 |
|
4044 | 4052 | \indexlibrarymember{base}{move_iterator}%
|
4045 | 4053 | \begin{itemdecl}
|
4046 |
| -constexpr Iterator base() const; |
| 4054 | +constexpr Iterator base() const &; |
4047 | 4055 | \end{itemdecl}
|
4048 | 4056 |
|
4049 | 4057 | \begin{itemdescr}
|
| 4058 | +\pnum |
| 4059 | +\constraints \tcode{Iterator} satisfies \tcode{CopyConstructible}. |
| 4060 | + |
| 4061 | +\pnum |
| 4062 | +\effects \tcode{Iterator} models \tcode{CopyConstructible}. |
| 4063 | + |
4050 | 4064 | \pnum
|
4051 | 4065 | \returns \tcode{current}.
|
4052 | 4066 | \end{itemdescr}
|
4053 | 4067 |
|
| 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 | + |
4054 | 4078 | \rSec3[move.iter.elem]{Element access}
|
4055 | 4079 |
|
4056 | 4080 | \indexlibrarymember{operator*}{move_iterator}%
|
|
4945 | 4969 | requires Assignable<I&, const I2&>
|
4946 | 4970 | constexpr counted_iterator& operator=(const counted_iterator<I2>& x);
|
4947 | 4971 |
|
4948 |
| - constexpr I base() const; |
| 4972 | + constexpr I base() const & requires CopyConstructible<I>;; |
| 4973 | + constexpr I base() &&; |
4949 | 4974 | constexpr iter_difference_t<I> count() const noexcept;
|
4950 | 4975 | constexpr decltype(auto) operator*();
|
4951 | 4976 | constexpr decltype(auto) operator*() const
|
|
5088 | 5113 |
|
5089 | 5114 | \indexlibrarymember{base}{counted_iterator}%
|
5090 | 5115 | \begin{itemdecl}
|
5091 |
| -constexpr I base() const; |
| 5116 | +constexpr I base() const & requires CopyConstructible<I>; |
5092 | 5117 | \end{itemdecl}
|
5093 | 5118 |
|
5094 | 5119 | \begin{itemdescr}
|
5095 | 5120 | \pnum
|
5096 | 5121 | \effects Equivalent to: \tcode{return current;}
|
5097 | 5122 | \end{itemdescr}
|
5098 | 5123 |
|
| 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 | + |
5099 | 5134 | \indexlibrarymember{count}{counted_iterator}%
|
5100 | 5135 | \begin{itemdecl}
|
5101 | 5136 | constexpr iter_difference_t<I> count() const noexcept;
|
|
0 commit comments