diff --git a/source/iterators.tex b/source/iterators.tex index 6cb29652b1..a280be411f 100644 --- a/source/iterators.tex +++ b/source/iterators.tex @@ -1282,7 +1282,7 @@ \begin{codeblock} template concept WeaklyIncrementable = - Semiregular && + DefaultConstructible && Movable && requires(I i) { typename iter_difference_t; requires SignedIntegral>; @@ -1379,6 +1379,12 @@ WeaklyIncrementable; \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 @@ -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}}% @@ -3946,7 +3953,8 @@ template constexpr move_iterator(const move_iterator& u); template constexpr move_iterator& operator=(const move_iterator& u); - constexpr iterator_type base() const; + constexpr iterator_type base() const &; + constexpr iterator_type base() &&; constexpr reference operator*() const; constexpr move_iterator& operator++(); @@ -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} @@ -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}% @@ -4944,7 +4968,8 @@ requires Assignable constexpr counted_iterator& operator=(const counted_iterator& x); - constexpr I base() const; + constexpr I base() const & requires CopyConstructible; + constexpr I base() &&; constexpr iter_difference_t count() const noexcept; constexpr decltype(auto) operator*(); constexpr decltype(auto) operator*() const @@ -5068,7 +5093,7 @@ \indexlibrarymember{base}{counted_iterator}% \begin{itemdecl} -constexpr I base() const; +constexpr I base() const & requires CopyConstructible; \end{itemdecl} \begin{itemdescr} @@ -5076,6 +5101,16 @@ \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 count() const noexcept;