|
1282 | 1282 | \begin{codeblock}
|
1283 | 1283 | template<class I>
|
1284 | 1284 | concept WeaklyIncrementable =
|
1285 |
| - Semiregular<I> && |
| 1285 | + DefaultConstructible<I> && Movable<I> && |
1286 | 1286 | requires(I i) {
|
1287 | 1287 | typename iter_difference_t<I>;
|
1288 | 1288 | requires SignedIntegral<iter_difference_t<I>>;
|
|
1379 | 1379 | WeaklyIncrementable<I>;
|
1380 | 1380 | \end{codeblock}
|
1381 | 1381 |
|
| 1382 | +\pnum |
| 1383 | +\begin{note} |
| 1384 | +Unlike the \oldconcept{Iterator} requirements, |
| 1385 | +the \libconcept{Iterator} concept does not require copyability. |
| 1386 | +\end{note} |
| 1387 | + |
1382 | 1388 | \rSec3[iterator.concept.sentinel]{Concept \tcode{Sentinel}}
|
1383 | 1389 |
|
1384 | 1390 | \pnum
|
|
1548 | 1554 | \rSec3[iterator.concept.forward]{Concept \tcode{ForwardIterator}}
|
1549 | 1555 |
|
1550 | 1556 | \pnum
|
1551 |
| -The \libconcept{ForwardIterator} concept adds equality comparison and |
| 1557 | +The \libconcept{ForwardIterator} concept adds |
| 1558 | +copyability, equality comparison, and |
1552 | 1559 | the multi-pass guarantee, specified below.
|
1553 | 1560 |
|
1554 | 1561 | \indexlibrary{\idxcode{ForwardIterator}}%
|
|
3946 | 3953 | template<class U> constexpr move_iterator(const move_iterator<U>& u);
|
3947 | 3954 | template<class U> constexpr move_iterator& operator=(const move_iterator<U>& u);
|
3948 | 3955 |
|
3949 |
| - constexpr iterator_type base() const; |
| 3956 | + constexpr iterator_type base() const &; |
| 3957 | + constexpr iterator_type base() &&; |
3950 | 3958 | constexpr reference operator*() const;
|
3951 | 3959 |
|
3952 | 3960 | constexpr move_iterator& operator++();
|
|
4035 | 4043 | \begin{itemdescr}
|
4036 | 4044 | \pnum
|
4037 | 4045 | \effects Constructs a \tcode{move_iterator}, initializing
|
4038 |
| -\tcode{current} with \tcode{i}. |
| 4046 | +\tcode{current} with \tcode{std::move(i)}. |
4039 | 4047 | \end{itemdescr}
|
4040 | 4048 |
|
4041 | 4049 |
|
|
4071 | 4079 |
|
4072 | 4080 | \indexlibrarymember{base}{move_iterator}%
|
4073 | 4081 | \begin{itemdecl}
|
4074 |
| -constexpr Iterator base() const; |
| 4082 | +constexpr Iterator base() const &; |
4075 | 4083 | \end{itemdecl}
|
4076 | 4084 |
|
4077 | 4085 | \begin{itemdescr}
|
| 4086 | +\pnum |
| 4087 | +\constraints \tcode{Iterator} satisfies \libconcept{CopyConstructible}. |
| 4088 | + |
| 4089 | +\pnum |
| 4090 | +\expects \tcode{Iterator} models \libconcept{CopyConstructible}. |
| 4091 | + |
4078 | 4092 | \pnum
|
4079 | 4093 | \returns \tcode{current}.
|
4080 | 4094 | \end{itemdescr}
|
4081 | 4095 |
|
| 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 | + |
4082 | 4106 | \rSec3[move.iter.elem]{Element access}
|
4083 | 4107 |
|
4084 | 4108 | \indexlibrarymember{operator*}{move_iterator}%
|
|
4944 | 4968 | requires Assignable<I&, const I2&>
|
4945 | 4969 | constexpr counted_iterator& operator=(const counted_iterator<I2>& x);
|
4946 | 4970 |
|
4947 |
| - constexpr I base() const; |
| 4971 | + constexpr I base() const & requires CopyConstructible<I>; |
| 4972 | + constexpr I base() &&; |
4948 | 4973 | constexpr iter_difference_t<I> count() const noexcept;
|
4949 | 4974 | constexpr decltype(auto) operator*();
|
4950 | 4975 | constexpr decltype(auto) operator*() const
|
|
5068 | 5093 |
|
5069 | 5094 | \indexlibrarymember{base}{counted_iterator}%
|
5070 | 5095 | \begin{itemdecl}
|
5071 |
| -constexpr I base() const; |
| 5096 | +constexpr I base() const & requires CopyConstructible<I>; |
5072 | 5097 | \end{itemdecl}
|
5073 | 5098 |
|
5074 | 5099 | \begin{itemdescr}
|
5075 | 5100 | \pnum
|
5076 | 5101 | \effects Equivalent to: \tcode{return current;}
|
5077 | 5102 | \end{itemdescr}
|
5078 | 5103 |
|
| 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 | + |
5079 | 5114 | \indexlibrarymember{count}{counted_iterator}%
|
5080 | 5115 | \begin{itemdecl}
|
5081 | 5116 | constexpr iter_difference_t<I> count() const noexcept;
|
|
0 commit comments