diff --git a/source/ranges.tex b/source/ranges.tex index 1a0b3427d2..6c60ff74a1 100644 --- a/source/ranges.tex +++ b/source/ranges.tex @@ -1165,44 +1165,44 @@ requires is_class_v && same_as> class view_interface : public view_base { private: - constexpr D& derived() noexcept { // \expos + constexpr D& @\exposid{derived}@() noexcept { // \expos return static_cast(*this); } - constexpr const D& derived() const noexcept { // \expos + constexpr const D& @\exposid{derived}@() const noexcept { // \expos return static_cast(*this); } public: constexpr bool empty() requires forward_range { - return ranges::begin(derived()) == ranges::end(derived()); + return ranges::begin(@\exposid{derived}@()) == ranges::end(@\exposid{derived}@()); } constexpr bool empty() const requires forward_range { - return ranges::begin(derived()) == ranges::end(derived()); + return ranges::begin(@\exposid{derived}@()) == ranges::end(@\exposid{derived}@()); } constexpr explicit operator bool() - requires requires { ranges::empty(derived()); } { - return !ranges::empty(derived()); + requires requires { ranges::empty(@\exposid{derived}@()); } { + return !ranges::empty(@\exposid{derived}@()); } constexpr explicit operator bool() const - requires requires { ranges::empty(derived()); } { - return !ranges::empty(derived()); + requires requires { ranges::empty(@\exposid{derived}@()); } { + return !ranges::empty(@\exposid{derived}@()); } constexpr auto data() requires contiguous_iterator> { - return to_address(ranges::begin(derived())); + return to_address(ranges::begin(@\exposid{derived}@())); } constexpr auto data() const requires range && contiguous_iterator> { - return to_address(ranges::begin(derived())); + return to_address(ranges::begin(@\exposid{derived}@())); } constexpr auto size() requires forward_range && sized_sentinel_for, iterator_t> { - return ranges::end(derived()) - ranges::begin(derived()); + return ranges::end(@\exposid{derived}@()) - ranges::begin(@\exposid{derived}@()); } constexpr auto size() const requires forward_range && sized_sentinel_for, iterator_t> { - return ranges::end(derived()) - ranges::begin(derived()); + return ranges::end(@\exposid{derived}@()) - ranges::begin(@\exposid{derived}@()); } constexpr decltype(auto) front() requires forward_range; @@ -1214,11 +1214,11 @@ template constexpr decltype(auto) operator[](range_difference_t n) { - return ranges::begin(derived())[n]; + return ranges::begin(@\exposid{derived}@())[n]; } template constexpr decltype(auto) operator[](range_difference_t n) const { - return ranges::begin(derived())[n]; + return ranges::begin(@\exposid{derived}@())[n]; } }; } @@ -1246,7 +1246,7 @@ \pnum \effects -Equivalent to: \tcode{return *ranges::begin(derived());} +Equivalent to: \tcode{return *ranges::begin(\exposid{derived}());} \end{itemdescr} \indexlibrarymember{back}{view_interface}% @@ -1263,7 +1263,7 @@ \pnum \effects -Equivalent to: \tcode{return *ranges::prev(ranges::end(derived()));} +Equivalent to: \tcode{return *ranges::prev(ranges::end(\exposid{derived}()));} \end{itemdescr} \rSec2[range.subrange]{Sub-ranges} @@ -1311,16 +1311,16 @@ requires (K == subrange_kind::sized || !sized_sentinel_for) class subrange : public view_interface> { private: - static constexpr bool StoreSize = // \expos + static constexpr bool @\exposid{StoreSize}@ = // \expos K == subrange_kind::sized && !sized_sentinel_for; - I begin_ = I(); // \expos - S end_ = S(); // \expos - @\placeholdernc{make-unsigned-like-t}@(iter_difference_t) size_ = 0; // \expos; present only - // when \tcode{StoreSize} is \tcode{true} + I @\exposid{begin_}@ = I(); // \expos + S @\exposid{end_}@ = S(); // \expos + @\placeholdernc{make-unsigned-like-t}@(iter_difference_t) @\exposid{size_}@ = 0; // \expos; present only + // when \exposid{StoreSize} is \tcode{true} public: subrange() = default; - constexpr subrange(I i, S s) requires (!StoreSize); + constexpr subrange(I i, S s) requires (!@\exposid{StoreSize}@); constexpr subrange(I i, S s, @\placeholdernc{make-unsigned-like-t}@(iter_difference_t) n) requires (K == subrange_kind::sized); @@ -1328,7 +1328,7 @@ template<@\exposconcept{not-same-as}@ R> requires safe_range && convertible_to, I> && convertible_to, S> - constexpr subrange(R&& r) requires (!StoreSize || sized_range); + constexpr subrange(R&& r) requires (!@\exposid{StoreSize}@ || sized_range); template requires convertible_to, I> && convertible_to, S> @@ -1339,7 +1339,7 @@ template<@\exposconcept{not-same-as}@ PairLike> requires @\exposconcept{pair-like-convertible-to}@ - constexpr subrange(PairLike&& r) requires (!StoreSize) + constexpr subrange(PairLike&& r) requires (!@\exposid{StoreSize}@) : subrange{std::get<0>(std::forward(r)), std::get<1>(std::forward(r))} {} @@ -1410,7 +1410,7 @@ \indexlibraryctor{subrange}% \begin{itemdecl} -constexpr subrange(I i, S s) requires (!StoreSize); +constexpr subrange(I i, S s) requires (!@\exposid{StoreSize}@); \end{itemdecl} \begin{itemdescr} @@ -1420,7 +1420,7 @@ \pnum \effects -Initializes \tcode{begin_} with \tcode{std::move(i)} and \tcode{end_} with +Initializes \exposid{begin_} with \tcode{std::move(i)} and \exposid{end_} with \tcode{s}. \end{itemdescr} @@ -1438,8 +1438,8 @@ \pnum \effects -Initializes \tcode{begin_} with \tcode{std::move(i)} and \tcode{end_} with -\tcode{s}. If \tcode{StoreSize} is \tcode{true}, initializes \tcode{size_} with +Initializes \exposid{begin_} with \tcode{std::move(i)} and \exposid{end_} with +\tcode{s}. If \exposid{StoreSize} is \tcode{true}, initializes \exposid{size_} with \tcode{n}. \pnum @@ -1456,7 +1456,7 @@ template<@\exposconcept{not-same-as}@ R> requires safe_range && convertible_to, I> && convertible_to, S> -constexpr subrange(R&& r) requires (!StoreSize || sized_range); +constexpr subrange(R&& r) requires (!@\exposid{StoreSize}@ || sized_range); \end{itemdecl} \begin{itemdescr} @@ -1464,7 +1464,7 @@ \effects Equivalent to: \begin{itemize} -\item If \tcode{StoreSize} is \tcode{true}, +\item If \exposid{StoreSize} is \tcode{true}, \tcode{subrange\{ranges::begin(r), ranges::end(r), ranges::size(r)\}}. \item Otherwise, \tcode{subrange\{ranges::begin(r), ranges::end(r)\}}. \end{itemize} @@ -1480,7 +1480,7 @@ \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return PairLike(begin_, end_);} +Equivalent to: \tcode{return PairLike(\exposid{begin_}, \exposid{end_});} \end{itemdescr} \rSec3[range.subrange.access]{Accessors} @@ -1493,7 +1493,7 @@ \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return begin_;} +Equivalent to: \tcode{return \exposid{begin_};} \end{itemdescr} \indexlibrarymember{begin}{subrange}% @@ -1504,7 +1504,7 @@ \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return std::move(begin_);} +Equivalent to: \tcode{return std::move(\exposid{begin_});} \end{itemdescr} \indexlibrarymember{end}{subrange}% @@ -1515,7 +1515,7 @@ \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return end_;} +Equivalent to: \tcode{return \exposid{end_};} \end{itemdescr} \indexlibrarymember{empty}{subrange}% @@ -1526,7 +1526,7 @@ \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return begin_ == end_;} +Equivalent to: \tcode{return \exposid{begin_} == \exposid{end_};} \end{itemdescr} \indexlibrarymember{size}{subrange}% @@ -1539,8 +1539,8 @@ \pnum \effects \begin{itemize} -\item If \tcode{StoreSize} is \tcode{true}, equivalent to: \tcode{return size_;} -\item Otherwise, equivalent to: \tcode{return \placeholdernc{make-unsigned-like}(end_ - begin_);} +\item If \exposid{StoreSize} is \tcode{true}, equivalent to: \tcode{return \exposid{size_};} +\item Otherwise, equivalent to: \tcode{return \placeholdernc{make-unsigned-like}(\exposid{end_} - \exposid{begin_});} \end{itemize} \end{itemdescr} @@ -1603,18 +1603,18 @@ \effects Equivalent to: \begin{itemize} -\item If \tcode{StoreSize} is \tcode{true}, +\item If \exposid{StoreSize} is \tcode{true}, \begin{codeblock} -auto d = n - ranges::advance(begin_, n, end_); +auto d = n - ranges::advance(begin_, n, @\exposid{end_}@); if (d >= 0) - size_ -= @\placeholdernc{make-unsigned-like}@(d); + @\exposid{size_}@ -= @\placeholdernc{make-unsigned-like}@(d); else - size_ += @\placeholdernc{make-unsigned-like}@(-d); + @\exposid{size_}@ += @\placeholdernc{make-unsigned-like}@(-d); return *this; \end{codeblock} \item Otherwise, \begin{codeblock} -ranges::advance(begin_, n, end_); +ranges::advance(begin_, n, @\exposid{end_}@); return *this; \end{codeblock} \end{itemize} @@ -1755,7 +1755,7 @@ requires is_object_v class single_view : public view_interface> { private: - @\placeholdernc{semiregular-box}@ value_; // \expos{} (see \ref{range.semi.wrap}) + @\placeholdernc{semiregular-box}@ @\exposid{value_}@; // \expos{} (see \ref{range.semi.wrap}) public: single_view() = default; constexpr explicit single_view(const T& t); @@ -1783,7 +1783,7 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{value_} with \tcode{t}. +Initializes \exposid{value_} with \tcode{t}. \end{itemdescr} \indexlibraryctor{single_view}% @@ -1794,7 +1794,7 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{value_} with \tcode{std::move(t)}. +Initializes \exposid{value_} with \tcode{std::move(t)}. \end{itemdescr} \indexlibraryctor{single_view}% @@ -1806,8 +1806,8 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{value_} as if by -\tcode{value_\{in_place, std::forward(args)...\}}. +Initializes \exposid{value_} as if by +\tcode{\exposid{value_}\{in_place, std::forward(args)...\}}. \end{itemdescr} \indexlibrarymember{begin}{single_view}% @@ -1854,7 +1854,7 @@ \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return value_.operator->();} +Equivalent to: \tcode{return \exposid{value_}.operator->();} \end{itemdescr} \rSec3[range.single.adaptor]{\tcode{views::single}} @@ -1899,20 +1899,20 @@ class iota_view : public view_interface> { private: // \ref{range.iota.iterator}, class \tcode{iota_view::iterator} - struct iterator; // \expos + struct @\exposid{iterator}@; // \expos // \ref{range.iota.sentinel}, class \tcode{iota_view::sentinel} - struct sentinel; // \expos - W value_ = W(); // \expos - Bound bound_ = Bound(); // \expos + struct @\exposid{sentinel}@; // \expos + W @\exposid{value_}@ = W(); // \expos + Bound @\exposid{bound_}@ = Bound(); // \expos public: iota_view() = default; constexpr explicit iota_view(W value); constexpr iota_view(type_identity_t value, type_identity_t bound); - constexpr iterator begin() const; + constexpr @\exposid{iterator}@ begin() const; constexpr auto end() const; - constexpr iterator end() const requires same_as; + constexpr @\exposid{iterator}@ end() const requires same_as; constexpr auto size() const requires @\seebelow@; }; @@ -2034,7 +2034,7 @@ \pnum \effects -Initializes \tcode{value_} with \tcode{value}. +Initializes \exposid{value_} with \tcode{value}. \end{itemdescr} \indexlibraryctor{iota_view}% @@ -2052,19 +2052,19 @@ \pnum \effects -Initializes \tcode{value_} with \tcode{value} and -\tcode{bound_} with \tcode{bound}. +Initializes \exposid{value_} with \tcode{value} and +\exposid{bound_} with \tcode{bound}. \end{itemdescr} \indexlibrarymember{begin}{iota_view}% \begin{itemdecl} -constexpr iterator begin() const; +constexpr @\exposid{iterator}@ begin() const; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return iterator\{value_\};} +Equivalent to: \tcode{return iterator\{\exposid{value_}\};} \end{itemdescr} \indexlibrarymember{end}{iota_view}% @@ -2080,13 +2080,13 @@ if constexpr (same_as) return unreachable_sentinel; else - return sentinel{bound_}; + return @\exposid{sentinel}@{@\exposid{bound_}@}; \end{codeblock} \end{itemdescr} \indexlibrarymember{end}{iota_view}% \begin{itemdecl} -constexpr iterator end() const requires same_as; +constexpr @\exposid{iterator}@ end() const requires same_as; \end{itemdecl} \begin{itemdescr} @@ -2106,13 +2106,13 @@ Equivalent to: \begin{codeblock} if constexpr (@\exposconcept{is-integer-like}@ && @\exposconcept{is-integer-like}@) - return (value_ < 0) - ? ((bound_ < 0) - ? @\placeholdernc{make-unsigned-like}@(-value_) - @\placeholdernc{make-unsigned-like}@(-bound_) - : @\placeholdernc{make-unsigned-like}@(bound_) + @\placeholdernc{make-unsigned-like}@(-value_)) - : @\placeholdernc{make-unsigned-like}@(bound_) - @\placeholdernc{make-unsigned-like}@(value_); + return (@\exposid{value_}@ < 0) + ? ((@\exposid{bound_}@ < 0) + ? @\placeholdernc{make-unsigned-like}@(-@\exposid{value_}@) - @\placeholdernc{make-unsigned-like}@(-@\exposid{bound_}@) + : @\placeholdernc{make-unsigned-like}@(@\exposid{bound_}@) + @\placeholdernc{make-unsigned-like}@(-@\exposid{value_}@)) + : @\placeholdernc{make-unsigned-like}@(@\exposid{bound_}@) - @\placeholdernc{make-unsigned-like}@(@\exposid{value_}@); else - return @\placeholdernc{make-unsigned-like}@(bound_ - value_); + return @\placeholdernc{make-unsigned-like}@(@\exposid{bound_}@ - @\exposid{value_}@); \end{codeblock} \pnum @@ -2130,56 +2130,56 @@ \begin{codeblock} namespace std::ranges { template - struct iota_view::iterator { + struct iota_view::@\exposid{iterator}@ { private: - W value_ = W(); // \expos + W @\exposid{value_}@ = W(); // \expos public: using iterator_category = @\seebelow@; using value_type = W; using difference_type = @\placeholdernc{IOTA-DIFF-T}@(W); - iterator() = default; - constexpr explicit iterator(W value); + @\exposid{iterator}@() = default; + constexpr explicit @\exposid{iterator}@(W value); constexpr W operator*() const noexcept(is_nothrow_copy_constructible_v); - constexpr iterator& operator++(); + constexpr @\exposid{iterator}@& operator++(); constexpr void operator++(int); - constexpr iterator operator++(int) requires incrementable; + constexpr @\exposid{iterator}@ operator++(int) requires incrementable; - constexpr iterator& operator--() requires @\exposconcept{decrementable}@; - constexpr iterator operator--(int) requires @\exposconcept{decrementable}@; + constexpr @\exposid{iterator}@& operator--() requires @\exposconcept{decrementable}@; + constexpr @\exposid{iterator}@ operator--(int) requires @\exposconcept{decrementable}@; - constexpr iterator& operator+=(difference_type n) + constexpr @\exposid{iterator}@& operator+=(difference_type n) requires @\exposconcept{advanceable}@; - constexpr iterator& operator-=(difference_type n) + constexpr @\exposid{iterator}@& operator-=(difference_type n) requires @\exposconcept{advanceable}@; constexpr W operator[](difference_type n) const requires @\exposconcept{advanceable}@; - friend constexpr bool operator==(const iterator& x, const iterator& y) + friend constexpr bool operator==(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) requires equality_comparable; - friend constexpr bool operator<(const iterator& x, const iterator& y) + friend constexpr bool operator<(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) requires totally_ordered; - friend constexpr bool operator>(const iterator& x, const iterator& y) + friend constexpr bool operator>(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) requires totally_ordered; - friend constexpr bool operator<=(const iterator& x, const iterator& y) + friend constexpr bool operator<=(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) requires totally_ordered; - friend constexpr bool operator>=(const iterator& x, const iterator& y) + friend constexpr bool operator>=(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) requires totally_ordered; friend constexpr compare_three_way_result_t operator<=>( - const iterator& x, const iterator& y) + const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) requires totally_ordered && three_way_comparable; - friend constexpr iterator operator+(iterator i, difference_type n) + friend constexpr @\exposid{iterator}@ operator+(@\exposid{iterator}@ i, difference_type n) requires @\exposconcept{advanceable}@; - friend constexpr iterator operator+(difference_type n, iterator i) + friend constexpr @\exposid{iterator}@ operator+(difference_type n, @\exposid{iterator}@ i) requires @\exposconcept{advanceable}@; - friend constexpr iterator operator-(iterator i, difference_type n) + friend constexpr @\exposid{iterator}@ operator-(@\exposid{iterator}@ i, difference_type n) requires @\exposconcept{advanceable}@; - friend constexpr difference_type operator-(const iterator& x, const iterator& y) + friend constexpr difference_type operator-(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) requires @\exposconcept{advanceable}@; }; } @@ -2204,13 +2204,13 @@ \indexlibraryctor{iota_view::iterator} \begin{itemdecl} -constexpr explicit iterator(W value); +constexpr explicit @\exposid{iterator}@(W value); \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{value_} with \tcode{value}. +Initializes \exposid{value_} with \tcode{value}. \end{itemdescr} \indexlibrarymember{operator*}{iota_view::iterator} @@ -2221,7 +2221,7 @@ \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return value_;} +Equivalent to: \tcode{return \exposid{value_};} \pnum \begin{note} @@ -2232,7 +2232,7 @@ \indexlibrarymember{operator++}{iota_view::iterator} \begin{itemdecl} -constexpr iterator& operator++(); +constexpr @\exposid{iterator}@& operator++(); \end{itemdecl} \begin{itemdescr} @@ -2240,7 +2240,7 @@ \effects Equivalent to: \begin{codeblock} -++value_; +++@\exposid{value_}@; return *this; \end{codeblock} \end{itemdescr} @@ -2258,7 +2258,7 @@ \indexlibrarymember{operator++}{iota_view::iterator} \begin{itemdecl} -constexpr iterator operator++(int) requires incrementable; +constexpr @\exposid{iterator}@ operator++(int) requires incrementable; \end{itemdecl} \begin{itemdescr} @@ -2274,7 +2274,7 @@ \indexlibrarymember{operator\dcr}{iota_view::iterator} \begin{itemdecl} -constexpr iterator& operator--() requires @\exposconcept{decrementable}@; +constexpr @\exposid{iterator}@& operator--() requires @\exposconcept{decrementable}@; \end{itemdecl} \begin{itemdescr} @@ -2282,14 +2282,14 @@ \effects Equivalent to: \begin{codeblock} ---value_; +--@\exposid{value_}@; return *this; \end{codeblock} \end{itemdescr} \indexlibrarymember{operator\dcr}{iota_view::iterator} \begin{itemdecl} -constexpr iterator operator--(int) requires @\exposconcept{decrementable}@; +constexpr @\exposid{iterator}@ operator--(int) requires @\exposconcept{decrementable}@; \end{itemdecl} \begin{itemdescr} @@ -2305,7 +2305,7 @@ \indexlibrarymember{operator+=}{iota_view::iterator} \begin{itemdecl} -constexpr iterator& operator+=(difference_type n) +constexpr @\exposid{iterator}@& operator+=(difference_type n) requires @\exposconcept{advanceable}@; \end{itemdecl} @@ -2316,11 +2316,11 @@ \begin{codeblock} if constexpr (@\exposconcept{is-integer-like}@ && !@\exposconcept{is-signed-integer-like}@) { if (n >= difference_type(0)) - value_ += static_cast(n); + @\exposid{value_}@ += static_cast(n); else - value_ -= static_cast(-n); + @\exposid{value_}@ -= static_cast(-n); } else { - value_ += n; + @\exposid{value_}@ += n; } return *this; \end{codeblock} @@ -2328,7 +2328,7 @@ \indexlibrarymember{operator-=}{iota_view::iterator} \begin{itemdecl} -constexpr iterator& operator-=(difference_type n) +constexpr @\exposid{iterator}@& operator-=(difference_type n) requires @\exposconcept{advanceable}@; \end{itemdecl} @@ -2339,11 +2339,11 @@ \begin{codeblock} if constexpr (@\exposconcept{is-integer-like}@ && !@\exposconcept{is-signed-integer-like}@) { if (n >= difference_type(0)) - value_ -= static_cast(n); + @\exposid{value_}@ -= static_cast(n); else - value_ += static_cast(-n); + @\exposid{value_}@ += static_cast(-n); } else { - value_ -= n; + @\exposid{value_}@ -= n; } return *this; \end{codeblock} @@ -2358,36 +2358,36 @@ \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return W(value_ + n);} +Equivalent to: \tcode{return W(\exposid{value_} + n);} \end{itemdescr} \indexlibrarymember{operator==}{iota_view::iterator} \begin{itemdecl} -friend constexpr bool operator==(const iterator& x, const iterator& y) +friend constexpr bool operator==(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) requires equality_comparable; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.value_ == y.value_;} +Equivalent to: \tcode{return x.\exposid{value_} == y.\exposid{value_};} \end{itemdescr} \indexlibrarymember{operator<}{iota_view::iterator} \begin{itemdecl} -friend constexpr bool operator<(const iterator& x, const iterator& y) +friend constexpr bool operator<(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) requires totally_ordered; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.value_ < y.value_;} +Equivalent to: \tcode{return x.\exposid{value_} < y.\exposid{value_};} \end{itemdescr} \indexlibrarymember{operator>}{iota_view::iterator} \begin{itemdecl} -friend constexpr bool operator>(const iterator& x, const iterator& y) +friend constexpr bool operator>(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) requires totally_ordered; \end{itemdecl} @@ -2399,7 +2399,7 @@ \indexlibrarymember{operator<=}{iota_view::iterator} \begin{itemdecl} -friend constexpr bool operator<=(const iterator& x, const iterator& y) +friend constexpr bool operator<=(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) requires totally_ordered; \end{itemdecl} @@ -2411,7 +2411,7 @@ \indexlibrarymember{operator>=}{iota_view::iterator} \begin{itemdecl} -friend constexpr bool operator>=(const iterator& x, const iterator& y) +friend constexpr bool operator>=(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) requires totally_ordered; \end{itemdecl} @@ -2424,19 +2424,19 @@ \indexlibrarymember{operator<=>}{iota_view::iterator} \begin{itemdecl} friend constexpr compare_three_way_result_t - operator<=>(const iterator& x, const iterator& y) + operator<=>(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) requires totally_ordered && three_way_comparable; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.value_ <=> y.value_;} +Equivalent to: \tcode{return x.\exposid{value_} <=> y.\exposid{value_};} \end{itemdescr} \indexlibrarymember{operator+}{iota_view::iterator} \begin{itemdecl} -friend constexpr iterator operator+(iterator i, difference_type n) +friend constexpr @\exposid{iterator}@ operator+(@\exposid{iterator}@ i, difference_type n) requires @\exposconcept{advanceable}@; \end{itemdecl} @@ -2448,7 +2448,7 @@ \indexlibrarymember{operator+}{iota_view::iterator} \begin{itemdecl} -friend constexpr iterator operator+(difference_type n, iterator i) +friend constexpr @\exposid{iterator}@ operator+(difference_type n, @\exposid{iterator}@ i) requires @\exposconcept{advanceable}@; \end{itemdecl} @@ -2460,7 +2460,7 @@ \indexlibrarymember{operator-}{iota_view::iterator} \begin{itemdecl} -friend constexpr iterator operator-(iterator i, difference_type n) +friend constexpr @\exposid{iterator}@ operator-(@\exposid{iterator}@ i, difference_type n) requires @\exposconcept{advanceable}@; \end{itemdecl} @@ -2472,7 +2472,7 @@ \indexlibrarymember{operator-}{iota_view::iterator} \begin{itemdecl} -friend constexpr difference_type operator-(const iterator& x, const iterator& y) +friend constexpr difference_type operator-(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) requires @\exposconcept{advanceable}@; \end{itemdecl} @@ -2484,13 +2484,13 @@ using D = difference_type; if constexpr (@\placeholder{is-integer-like}@) { if constexpr (@\placeholder{is-signed-integer-like}@) - return D(D(x.value_) - D(y.value_)); + return D(D(x.@\exposid{value_}@) - D(y.@\exposid{value_}@)); else - return (y.value_ > x.value_) - ? D(-D(y.value_ - x.value_)) - : D(x.value_ - y.value_); + return (y.@\exposid{value_}@ > x.@\exposid{value_}@) + ? D(-D(y.@\exposid{value_}@ - x.@\exposid{value_}@)) + : D(x.@\exposid{value_}@ - y.@\exposid{value_}@); } else { - return x.value_ - y.value_; + return x.@\exposid{value_}@ - y.@\exposid{value_}@; } \end{codeblock} \end{itemdescr} @@ -2501,18 +2501,18 @@ \begin{codeblock} namespace std::ranges { template - struct iota_view::sentinel { + struct iota_view::@\exposid{sentinel}@ { private: - Bound bound_ = Bound(); // \expos + Bound @\exposid{bound_}@ = Bound(); // \expos public: - sentinel() = default; - constexpr explicit sentinel(Bound bound); + @\exposid{sentinel}@() = default; + constexpr explicit @\exposid{sentinel}@(Bound bound); - friend constexpr bool operator==(const iterator& x, const sentinel& y); + friend constexpr bool operator==(const @\exposid{iterator}@& x, const @\exposid{sentinel}@& y); - friend constexpr iter_difference_t operator-(const iterator& x, const sentinel& y) + friend constexpr iter_difference_t operator-(const @\exposid{iterator}@& x, const @\exposid{sentinel}@& y) requires sized_sentinel_for; - friend constexpr iter_difference_t operator-(const sentinel& x, const iterator& y) + friend constexpr iter_difference_t operator-(const @\exposid{sentinel}@& x, const @\exposid{iterator}@& y) requires sized_sentinel_for; }; } @@ -2520,39 +2520,39 @@ \indexlibraryctor{iota_view::sentinel} \begin{itemdecl} -constexpr explicit sentinel(Bound bound); +constexpr explicit @\exposid{sentinel}@(Bound bound); \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{bound_} with \tcode{bound}. +Initializes \exposid{bound_} with \tcode{bound}. \end{itemdescr} \indexlibrarymember{operator==}{iota_view::sentinel} \begin{itemdecl} -friend constexpr bool operator==(const iterator& x, const sentinel& y); +friend constexpr bool operator==(const @\exposid{iterator}@& x, const @\exposid{sentinel}@& y); \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.value_ == y.bound_;} +Equivalent to: \tcode{return x.\exposid{value_} == y.\exposid{bound_};} \end{itemdescr} \begin{itemdecl} -friend constexpr iter_difference_t operator-(const iterator& x, const sentinel& y) +friend constexpr iter_difference_t operator-(const @\exposid{iterator}@& x, const sentinel& y) requires sized_sentinel_for; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.value_ - y.bound_;} +Equivalent to: \tcode{return x.\exposid{value_} - y.\exposid{bound_};} \end{itemdescr} \begin{itemdecl} -friend constexpr iter_difference_t operator-(const sentinel& x, const iterator& y) +friend constexpr iter_difference_t operator-(const @\exposid{sentinel}@& x, const @\exposid{iterator}@& y) requires sized_sentinel_for; \end{itemdecl} @@ -2611,18 +2611,18 @@ constexpr auto begin() { - if (stream_) { - *stream_ >> object_; + if (@\exposid{stream_}@) { + *@\exposid{stream_}@ >> @\exposid{object_}@; } - return iterator{*this}; + return @\exposid{iterator}@{*this}; } constexpr default_sentinel_t end() const noexcept; private: - struct iterator; // \expos - basic_istream* stream_{}; // \expos - Val object_ = Val(); // \expos + struct @\exposid{iterator}@; // \expos + basic_istream* @\exposid{stream_}@{}; // \expos + Val @\exposid{object_}@ = Val(); // \expos }; } \end{codeblock} @@ -2635,7 +2635,7 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{stream_} with \tcode{addressof(stream)}. +Initializes \exposid{stream_} with \tcode{addressof(stream)}. \end{itemdescr} \indexlibrarymember{end}{basic_istream_view}% @@ -2667,60 +2667,60 @@ \begin{codeblock} namespace std::ranges { template - class basic_istream_view::iterator { // \expos + class basic_istream_view::@\exposid{iterator}@ { // \expos public: using iterator_category = input_iterator_tag; using difference_type = ptrdiff_t; using value_type = Val; - iterator() = default; - constexpr explicit iterator(basic_istream_view& parent) noexcept; + @\exposid{iterator}@() = default; + constexpr explicit @\exposid{iterator}@(basic_istream_view& parent) noexcept; - iterator(const iterator&) = delete; - iterator(iterator&&) = default; + @\exposid{iterator}@(const @\exposid{iterator}@&) = delete; + @\exposid{iterator}@(@\exposid{iterator}@&&) = default; - iterator& operator=(const iterator&) = delete; - iterator& operator=(iterator&&) = default; + @\exposid{iterator}@& operator=(const @\exposid{iterator}@&) = delete; + @\exposid{iterator}@& operator=(@\exposid{iterator}@&&) = default; - iterator& operator++(); + @\exposid{iterator}@& operator++(); void operator++(int); Val& operator*() const; - friend bool operator==(const iterator& x, default_sentinel_t); + friend bool operator==(const @\exposid{iterator}@& x, default_sentinel_t); private: - basic_istream_view* parent_{}; // \expos + basic_istream_view* @\exposid{parent_}@{}; // \expos }; } \end{codeblock} \indexlibraryctor{basic_istream_view::iterator}% \begin{itemdecl} -constexpr explicit iterator(basic_istream_view& parent) noexcept; +constexpr explicit @\exposid{iterator}@(basic_istream_view& parent) noexcept; \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{parent_} with \tcode{addressof(parent)}. +Initializes \exposid{parent_} with \tcode{addressof(parent)}. \end{itemdescr} \indexlibrarymember{operator++}{basic_istream_view::iterator}% \begin{itemdecl} -iterator& operator++(); +@\exposid{iterator}@& operator++(); \end{itemdecl} \begin{itemdescr} \pnum \expects -\tcode{parent_->stream_ != nullptr} is \tcode{true}. +\tcode{\exposid{parent_}->\exposid{stream_} != nullptr} is \tcode{true}. \pnum \effects Equivalent to: \begin{codeblock} -*parent_->stream >> parent_->object_; +*@\exposid{parent_}@->stream >> @\exposid{parent_}@->@\exposid{object_}@; return *this; \end{codeblock} \end{itemdescr} @@ -2733,7 +2733,7 @@ \begin{itemdescr} \pnum \expects -\tcode{parent_->stream_ != nullptr} is \tcode{true}. +\tcode{\exposid{parent_}->\exposid{stream_} != nullptr} is \tcode{true}. \pnum \effects @@ -2748,22 +2748,22 @@ \begin{itemdescr} \pnum \expects -\tcode{parent_->stream_ != nullptr} is \tcode{true}. +\tcode{\exposid{parent_}->\exposid{stream_} != nullptr} is \tcode{true}. \pnum \effects -Equivalent to: \tcode{return parent_->value_;} +Equivalent to: \tcode{return \exposid{parent_}->\exposid{value_};} \end{itemdescr} \indexlibrarymember{operator==}{basic_istream_view::iterator}% \begin{itemdecl} -friend bool operator==(const iterator& x, default_sentinel_t); +friend bool operator==(const @\exposid{iterator}@& x, default_sentinel_t); \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.parent_ == nullptr || !*x.parent_->stream_;} +Equivalent to: \tcode{return x.\exposid{parent_} == nullptr || !*x.\exposid{parent_}->\exposid{stream_};} \end{itemdescr} \rSec1[range.adaptors]{Range adaptors} @@ -2917,7 +2917,7 @@ requires is_object_v class ref_view : public view_interface> { private: - R* r_ = nullptr; // \expos + R* @\exposid{r_}@ = nullptr; // \expos public: constexpr ref_view() noexcept = default; @@ -2925,20 +2925,20 @@ requires @\seebelow@ constexpr ref_view(T&& t); - constexpr R& base() const { return *r_; } + constexpr R& base() const { return *@\exposid{r_}@; } - constexpr iterator_t begin() const { return ranges::begin(*r_); } - constexpr sentinel_t end() const { return ranges::end(*r_); } + constexpr iterator_t begin() const { return ranges::begin(*@\exposid{r_}@); } + constexpr sentinel_t end() const { return ranges::end(*@\exposid{r_}@); } constexpr bool empty() const - requires requires { ranges::empty(*r_); } - { return ranges::empty(*r_); } + requires requires { ranges::empty(*@\exposid{r_}@); } + { return ranges::empty(*@\exposid{r_}@); } constexpr auto size() const requires sized_range - { return ranges::size(*r_); } + { return ranges::size(*@\exposid{r_}@); } constexpr auto data() const requires contiguous_range - { return ranges::data(*r_); } + { return ranges::data(*@\exposid{r_}@); } }; template ref_view(R&) -> ref_view; @@ -2967,7 +2967,7 @@ \pnum \effects -Initializes \tcode{r_} with +Initializes \exposid{r_} with \tcode{addressof(static_cast(std::forward(t)))}. \end{itemdescr} @@ -3001,13 +3001,13 @@ requires view && is_object_v class filter_view : public view_interface> { private: - V base_ = V(); // \expos - @\placeholdernc{semiregular-box}@ pred_; // \expos + V @\exposid{base_}@ = V(); // \expos + @\placeholdernc{semiregular-box}@ @\exposid{pred_}@; // \expos // \ref{range.filter.iterator}, class \tcode{filter_view::iterator} - class iterator; // \expos + class @\exposid{iterator}@; // \expos // \ref{range.filter.sentinel}, class \tcode{filter_view::sentinel} - class sentinel; // \expos + class @\exposid{sentinel}@; // \expos public: filter_view() = default; @@ -3016,15 +3016,15 @@ requires viewable_range && constructible_from> constexpr filter_view(R&& r, Pred pred); - constexpr V base() const& requires copy_constructible { return base_; } - constexpr V base() && { return std::move(base_); } + constexpr V base() const& requires copy_constructible { return @\exposid{base_}@; } + constexpr V base() && { return std::move(@\exposid{base_}@); } - constexpr iterator begin(); + constexpr @\exposid{iterator}@ begin(); constexpr auto end() { if constexpr (common_range) - return iterator{*this, ranges::end(base_)}; + return @\exposid{iterator}@{*this, ranges::end(@\exposid{base_}@)}; else - return sentinel{*this}; + return @\exposid{sentinel}@{*this}; } }; @@ -3041,8 +3041,8 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{base_} with \tcode{std::move(base)} and initializes -\tcode{pred_} with \tcode{std::move(pred)}. +Initializes \exposid{base_} with \tcode{std::move(base)} and initializes +\exposid{pred_} with \tcode{std::move(pred)}. \end{itemdescr} \indexlibraryctor{filter_view}% @@ -3055,13 +3055,13 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{base_} with \tcode{views::all(std::forward(r))} -and initializes \tcode{pred_} with \tcode{std::\brk{}move(pred)}. +Initializes \exposid{base_} with \tcode{views::all(std::forward(r))} +and initializes \exposid{pred_} with \tcode{std::\brk{}move(pred)}. \end{itemdescr} \indexlibrarymember{begin}{filter_view}% \begin{itemdecl} -constexpr iterator begin(); +constexpr @\exposid{iterator}@ begin(); \end{itemdecl} \begin{itemdescr} @@ -3071,7 +3071,7 @@ \pnum \returns -\tcode{\{*this, ranges::find_if(base_, ref(*pred_))\}}. +\tcode{\{*this, ranges::find_if(\exposid{base_}, ref(*pred_))\}}. \pnum \remarks @@ -3088,18 +3088,18 @@ \begin{codeblock} namespace std::ranges { template - class filter_view::iterator { + class filter_view::@\exposid{iterator}@ { private: - iterator_t current_ = iterator_t(); // \expos - filter_view* parent_ = nullptr; // \expos + iterator_t @\exposid{current_}@ = iterator_t(); // \expos + filter_view* @\exposid{parent_}@ = nullptr; // \expos public: using iterator_concept = @\seebelow@; using iterator_category = @\seebelow@; using value_type = range_value_t; using difference_type = range_difference_t; - iterator() = default; - constexpr iterator(filter_view& parent, iterator_t current); + @\exposid{iterator}@() = default; + constexpr @\exposid{iterator}@(filter_view& parent, iterator_t current); constexpr iterator_t base() const & requires copyable>; @@ -3108,21 +3108,21 @@ constexpr iterator_t operator->() const requires @\placeholder{has-arrow}@> && copyable>; - constexpr iterator& operator++(); + constexpr @\exposid{iterator}@& operator++(); constexpr void operator++(int); - constexpr iterator operator++(int) requires forward_range; + constexpr @\exposid{iterator}@ operator++(int) requires forward_range; - constexpr iterator& operator--() requires bidirectional_range; - constexpr iterator operator--(int) requires bidirectional_range; + constexpr @\exposid{iterator}@& operator--() requires bidirectional_range; + constexpr @\exposid{iterator}@ operator--(int) requires bidirectional_range; - friend constexpr bool operator==(const iterator& x, const iterator& y) + friend constexpr bool operator==(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) requires equality_comparable>; - friend constexpr range_rvalue_reference_t iter_move(const iterator& i) - noexcept(noexcept(ranges::iter_move(i.current_))); - friend constexpr void iter_swap(const iterator& x, const iterator& y) - noexcept(noexcept(ranges::iter_swap(x.current_, y.current_))) - requires indirectly_swappable>; + friend constexpr range_rvalue_reference_t iter_move(const @\exposid{iterator}@& i) + noexcept(noexcept(ranges::iter_move(i.@\exposid{current_}@))); + friend constexpr void iter_swap(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + noexcept(noexcept(ranges::iter_swap(x.@\exposid{current_}@, y.@\exposid{current_}@))) + requires indirectly_swappable<@\exposid{iterator}@_t>; }; } \end{codeblock} @@ -3163,14 +3163,14 @@ \indexlibraryctor{filter_view::iterator}% \begin{itemdecl} -constexpr iterator(filter_view& parent, iterator_t current); +constexpr @\exposid{iterator}@(filter_view& parent, iterator_t current); \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{current_} with \tcode{std::move(current)} and -\tcode{parent_} with \tcode{addressof(parent)}. +Initializes \exposid{current_} with \tcode{std::move(current)} and +\exposid{parent_} with \tcode{addressof(parent)}. \end{itemdescr} \indexlibrarymember{base}{filter_view::iterator}% @@ -3182,7 +3182,7 @@ \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return current_;} +Equivalent to: \tcode{return \exposid{current_};} \end{itemdescr} \indexlibrarymember{base}{filter_view::iterator}% @@ -3204,7 +3204,7 @@ \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return *current_;} +Equivalent to: \tcode{return *\exposid{current_};} \end{itemdescr} \indexlibrarymember{operator->}{filter_view::iterator}% @@ -3216,12 +3216,12 @@ \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return current_;} +Equivalent to: \tcode{return \exposid{current_};} \end{itemdescr} \indexlibrarymember{operator++}{filter_view::iterator}% \begin{itemdecl} -constexpr iterator& operator++(); +constexpr @\exposid{iterator}@& operator++(); \end{itemdecl} \begin{itemdescr} @@ -3229,8 +3229,8 @@ \effects Equivalent to: \begin{codeblock} -current_ = ranges::find_if(std::move(++current_), ranges::end(parent_->base_), - ref(*parent_->pred_)); +@\exposid{current_}@ = ranges::find_if(std::move(++@\exposid{current_}@), ranges::end(@\exposid{parent_}@->@\exposid{base_}@), + ref(*@\exposid{parent_}@->@\exposid{pred_}@)); return *this; \end{codeblock} \end{itemdescr} @@ -3248,7 +3248,7 @@ \indexlibrarymember{operator++}{filter_view::iterator}% \begin{itemdecl} -constexpr iterator operator++(int) requires forward_range; +constexpr @\exposid{iterator}@ operator++(int) requires forward_range; \end{itemdecl} \begin{itemdescr} @@ -3264,7 +3264,7 @@ \indexlibrarymember{operator\dcr}{filter_view::iterator}% \begin{itemdecl} -constexpr iterator& operator--() requires bidirectional_range; +constexpr @\exposid{iterator}@& operator--() requires bidirectional_range; \end{itemdecl} \begin{itemdescr} @@ -3273,15 +3273,15 @@ Equivalent to: \begin{codeblock} do - --current_; -while (!invoke(*parent_->pred_, *current_)); + --@\exposid{current_}@; +while (!invoke(*@\exposid{parent_}@->@\exposid{pred_}@, *@\exposid{current_}@)); return *this; \end{codeblock} \end{itemdescr} \indexlibrarymember{operator\dcr}{filter_view::iterator}% \begin{itemdecl} -constexpr iterator operator--(int) requires bidirectional_range; +constexpr @\exposid{iterator}@ operator--(int) requires bidirectional_range; \end{itemdecl} \begin{itemdescr} @@ -3297,39 +3297,39 @@ \indexlibrarymember{operator==}{filter_view::iterator}% \begin{itemdecl} -friend constexpr bool operator==(const iterator& x, const iterator& y) +friend constexpr bool operator==(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) requires equality_comparable>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.current_ == y.current_;} +Equivalent to: \tcode{return x.\exposid{current_} == y.\exposid{current_};} \end{itemdescr} \indexlibrarymember{iter_move}{filter_view::iterator}% \begin{itemdecl} -friend constexpr range_rvalue_reference_t iter_move(const iterator& i) - noexcept(noexcept(ranges::iter_move(i.current_))); +friend constexpr range_rvalue_reference_t iter_move(const @\exposid{iterator}@& i) + noexcept(noexcept(ranges::iter_move(i.@\exposid{current_}@))); \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return ranges::iter_move(i.current_);} +Equivalent to: \tcode{return ranges::iter_move(i.\exposid{current_});} \end{itemdescr} \indexlibrarymember{iter_swap}{filter_view::iterator}% \begin{itemdecl} -friend constexpr void iter_swap(const iterator& x, const iterator& y) - noexcept(noexcept(ranges::iter_swap(x.current_, y.current_))) +friend constexpr void iter_swap(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + noexcept(noexcept(ranges::iter_swap(x.@\exposid{current_}@, y.@\exposid{current_}@))) requires indirectly_swappable>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to \tcode{ranges::iter_swap(x.current_, y.current_)}. +Equivalent to \tcode{ranges::iter_swap(x.\exposid{current_}, y.\exposid{current_})}. \end{itemdescr} \rSec3[range.filter.sentinel]{Class \tcode{filter_view::sentinel}} @@ -3338,29 +3338,29 @@ \begin{codeblock} namespace std::ranges { template - class filter_view::sentinel { + class filter_view::@\exposid{sentinel}@ { private: - sentinel_t end_ = sentinel_t(); // \expos + sentinel_t @\exposid{end_}@ = sentinel_t(); // \expos public: - sentinel() = default; - constexpr explicit sentinel(filter_view& parent); + @\exposid{sentinel}@() = default; + constexpr explicit @\exposid{sentinel}@(filter_view& parent); constexpr sentinel_t base() const; - friend constexpr bool operator==(const iterator& x, const sentinel& y); + friend constexpr bool operator==(const @\exposid{iterator}@& x, const @\exposid{sentinel}@& y); }; } \end{codeblock} \indexlibraryctor{filter_view::sentinel}% \begin{itemdecl} -constexpr explicit sentinel(filter_view& parent); +constexpr explicit @\exposid{sentinel}@(filter_view& parent); \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{end_} with \tcode{ranges::end(parent.base_)}. +Initializes \exposid{end_} with \tcode{ranges::end(\exposid{parent_}.\exposid{base_})}. \end{itemdescr} \indexlibrarymember{base}{filter_view::sentinel}% @@ -3371,18 +3371,18 @@ \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return end_;} +Equivalent to: \tcode{return \exposid{end_};} \end{itemdescr} \indexlibrarymember{operator==}{filter_view::sentinel}% \begin{itemdecl} -friend constexpr bool operator==(const iterator& x, const sentinel& y); +friend constexpr bool operator==(const @\exposid{iterator}@& x, const @\exposid{sentinel}@& y); \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.current_ == y.end_;} +Equivalent to: \tcode{return x.\exposid{current_} == y.\exposid{end_};} \end{itemdescr} \rSec3[range.filter.adaptor]{\tcode{views::filter}} @@ -3427,12 +3427,12 @@ class transform_view : public view_interface> { private: // \ref{range.transform.iterator}, class template \tcode{transform_view::iterator} - template struct iterator; // \expos + template struct @\exposid{iterator}@; // \expos // \ref{range.transform.sentinel}, class template \tcode{transform_view::sentinel} - template struct sentinel; // \expos + template struct @\exposid{sentinel}@; // \expos - V base_ = V(); // \expos - @\placeholdernc{semiregular-box}@ fun_; // \expos + V @\exposid{base_}@ = V(); // \expos + @\placeholdernc{semiregular-box}@ @\exposid{fun_}@; // \expos public: transform_view() = default; @@ -3441,26 +3441,26 @@ requires viewable_range && constructible_from> constexpr transform_view(R&& r, F fun); - constexpr V base() const& requires copy_constructible { return base_; } - constexpr V base() && { return std::move(base_); } + constexpr V base() const& requires copy_constructible { return @\exposid{base_}@; } + constexpr V base() && { return std::move(@\exposid{base_}@); } - constexpr iterator begin(); - constexpr iterator begin() const + constexpr @\exposid{iterator}@ begin(); + constexpr @\exposid{iterator}@ begin() const requires range && regular_invocable>; - constexpr sentinel end(); - constexpr iterator end() requires common_range; - constexpr sentinel end() const + constexpr @\exposid{sentinel}@ end(); + constexpr @\exposid{iterator}@ end() requires common_range; + constexpr @\exposid{sentinel}@ end() const requires range && regular_invocable>; - constexpr iterator end() const + constexpr @\exposid{iterator}@ end() const requires common_range && regular_invocable>; - constexpr auto size() requires sized_range { return ranges::size(base_); } + constexpr auto size() requires sized_range { return ranges::size(@\exposid{base_}@); } constexpr auto size() const requires sized_range - { return ranges::size(base_); } + { return ranges::size(@\exposid{base_}@); } }; template @@ -3476,8 +3476,8 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{base_} with \tcode{std::move(base)} and -\tcode{fun_} with \tcode{std::move(fun)}. +Initializes \exposid{base_} with \tcode{std::move(base)} and +\exposid{fun_} with \tcode{std::move(fun)}. \end{itemdescr} \indexlibraryctor{transform_view}% @@ -3490,13 +3490,13 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{base_} with \tcode{views::all(std::forward(r))} -and \tcode{fun_} with \tcode{std::move(fun)}. +Initializes \exposid{base_} with \tcode{views::all(std::forward(r))} +and \exposid{fun_} with \tcode{std::move(fun)}. \end{itemdescr} \indexlibrarymember{begin}{transform_view}% \begin{itemdecl} -constexpr iterator begin(); +constexpr @\exposid{iterator}@ begin(); \end{itemdecl} \begin{itemdescr} @@ -3504,13 +3504,13 @@ \effects Equivalent to: \begin{codeblock} -return iterator{*this, ranges::begin(base_)}; +return @\exposid{iterator}@{*this, ranges::begin(@\exposid{base_}@)}; \end{codeblock} \end{itemdescr} \indexlibrarymember{begin}{transform_view}% \begin{itemdecl} -constexpr iterator begin() const +constexpr @\exposid{iterator}@ begin() const requires range && regular_invocable>; \end{itemdecl} @@ -3520,13 +3520,13 @@ \effects Equivalent to: \begin{codeblock} -return iterator{*this, ranges::begin(base_)}; +return @\exposid{iterator}@{*this, ranges::begin(@\exposid{base_}@)}; \end{codeblock} \end{itemdescr} \indexlibrarymember{end}{transform_view}% \begin{itemdecl} -constexpr sentinel end(); +constexpr @\exposid{sentinel}@ end(); \end{itemdecl} \begin{itemdescr} @@ -3534,13 +3534,13 @@ \effects Equivalent to: \begin{codeblock} -return sentinel{ranges::end(base_)}; +return @\exposid{sentinel}@{ranges::end(@\exposid{base_}@)}; \end{codeblock} \end{itemdescr} \indexlibrarymember{end}{transform_view}% \begin{itemdecl} -constexpr iterator end() requires common_range; +constexpr @\exposid{iterator}@ end() requires common_range; \end{itemdecl} \begin{itemdescr} @@ -3548,13 +3548,13 @@ \effects Equivalent to: \begin{codeblock} -return iterator{*this, ranges::end(base_)}; +return @\exposid{iterator}@{*this, ranges::end(@\exposid{base_}@)}; \end{codeblock} \end{itemdescr} \indexlibrarymember{end}{transform_view}% \begin{itemdecl} -constexpr sentinel end() const +constexpr @\exposid{sentinel}@ end() const requires range && regular_invocable>; \end{itemdecl} @@ -3564,13 +3564,13 @@ \effects Equivalent to: \begin{codeblock} -return sentinel{ranges::end(base_)}; +return @\exposid{sentinel}@{ranges::end(@\exposid{base_}@)}; \end{codeblock} \end{itemdescr} \indexlibrarymember{end}{transform_view}% \begin{itemdecl} -constexpr iterator end() const +constexpr @\exposid{iterator}@ end() const requires common_range && regular_invocable>; \end{itemdecl} @@ -3580,7 +3580,7 @@ \effects Equivalent to: \begin{codeblock} -return iterator{*this, ranges::end(base_)}; +return @\exposid{iterator}@{*this, ranges::end(@\exposid{base_}@)}; \end{codeblock} \end{itemdescr} @@ -3591,75 +3591,75 @@ namespace std::ranges { template template - class transform_view::iterator { + class transform_view::@\exposid{iterator}@ { private: - using Parent = // \expos + using @\exposid{Parent}@ = // \expos conditional_t; - using Base = // \expos + using @\exposid{Base}@ = // \expos conditional_t; - iterator_t current_ = // \expos - iterator_t(); - Parent* parent_ = nullptr; // \expos + iterator_t<@\exposid{Base}@> @\exposid{current_}@ = // \expos + iterator_t<@\exposid{Base}@>(); + @\exposid{Parent}@* @\exposid{parent_}@ = nullptr; // \expos public: using iterator_concept = @\seebelow@; using iterator_category = @\seebelow@; using value_type = - remove_cvref_t>>; - using difference_type = range_difference_t; + remove_cvref_t>>; + using difference_type = range_difference_t<@\exposid{Base}@>; - iterator() = default; - constexpr iterator(Parent& parent, iterator_t current); - constexpr iterator(iterator i) - requires Const && convertible_to, iterator_t>; + @\exposid{iterator}@() = default; + constexpr @\exposid{iterator}@(@\exposid{Parent}@& parent, iterator_t<@\exposid{Base}@> current); + constexpr @\exposid{iterator}@(iterator i) + requires Const && convertible_to, iterator_t<@\exposid{Base}@>>; - constexpr iterator_t base() const & - requires copyable>; - constexpr iterator_t base() &&; + constexpr iterator_t<@\exposid{Base}@> base() const & + requires copyable>; + constexpr iterator_t<@\exposid{Base}@> base() &&; constexpr decltype(auto) operator*() const - { return invoke(*parent_->fun_, *current_); } + { return invoke(*@\exposid{parent_}@->@\exposid{fun_}@, *@\exposid{current_}@); } - constexpr iterator& operator++(); + constexpr @\exposid{iterator}@& operator++(); constexpr void operator++(int); - constexpr iterator operator++(int) requires forward_range; + constexpr @\exposid{iterator}@ operator++(int) requires forward_range<@\exposid{Base}@>; - constexpr iterator& operator--() requires bidirectional_range; - constexpr iterator operator--(int) requires bidirectional_range; + constexpr @\exposid{iterator}@& operator--() requires bidirectional_range<@\exposid{Base}@>; + constexpr @\exposid{iterator}@ operator--(int) requires bidirectional_range<@\exposid{Base}@>; - constexpr iterator& operator+=(difference_type n) - requires random_access_range; - constexpr iterator& operator-=(difference_type n) - requires random_access_range; + constexpr @\exposid{iterator}@& operator+=(difference_type n) + requires random_access_range<@\exposid{Base}@>; + constexpr @\exposid{iterator}@& operator-=(difference_type n) + requires random_access_range<@\exposid{Base}@>; constexpr decltype(auto) operator[](difference_type n) const - requires random_access_range - { return invoke(*parent_->fun_, current_[n]); } - - friend constexpr bool operator==(const iterator& x, const iterator& y) - requires equality_comparable>; - - friend constexpr bool operator<(const iterator& x, const iterator& y) - requires random_access_range; - friend constexpr bool operator>(const iterator& x, const iterator& y) - requires random_access_range; - friend constexpr bool operator<=(const iterator& x, const iterator& y) - requires random_access_range; - friend constexpr bool operator>=(const iterator& x, const iterator& y) - requires random_access_range; - friend constexpr compare_three_way_result_t> - operator<=>(const iterator& x, const iterator& y) - requires random_access_range && three_way_comparable>; - - friend constexpr iterator operator+(iterator i, difference_type n) - requires random_access_range; - friend constexpr iterator operator+(difference_type n, iterator i) - requires random_access_range; - - friend constexpr iterator operator-(iterator i, difference_type n) - requires random_access_range; - friend constexpr difference_type operator-(const iterator& x, const iterator& y) - requires random_access_range; - - friend constexpr decltype(auto) iter_move(const iterator& i) - noexcept(noexcept(invoke(*i.parent_->fun_, *i.current_))) + requires random_access_range<@\exposid{Base}@> + { return invoke(*@\exposid{parent_}@->@\exposid{fun_}@, @\exposid{current_}@[n]); } + + friend constexpr bool operator==(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires equality_comparable>; + + friend constexpr bool operator<(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{Base}@>; + friend constexpr bool operator>(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{Base}@>; + friend constexpr bool operator<=(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{Base}@>; + friend constexpr bool operator>=(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{Base}@>; + friend constexpr compare_three_way_result_t> + operator<=>(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{Base}@> && three_way_comparable>; + + friend constexpr @\exposid{iterator}@ operator+(@\exposid{iterator}@ i, difference_type n) + requires random_access_range<@\exposid{Base}@>; + friend constexpr @\exposid{iterator}@ operator+(difference_type n, @\exposid{iterator}@ i) + requires random_access_range<@\exposid{Base}@>; + + friend constexpr @\exposid{iterator}@ operator-(@\exposid{iterator}@ i, difference_type n) + requires random_access_range<@\exposid{Base}@>; + friend constexpr difference_type operator-(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{Base}@>; + + friend constexpr decltype(auto) iter_move(const @\exposid{iterator}@& i) + noexcept(noexcept(invoke(*i.@\exposid{parent_}@->@\exposid{fun_}@, *i.@\exposid{current_}@))) { if constexpr (is_lvalue_reference_v) return std::move(*i); @@ -3667,9 +3667,9 @@ return *i; } - friend constexpr void iter_swap(const iterator& x, const iterator& y) - noexcept(noexcept(ranges::iter_swap(x.current_, y.current_))) - requires indirectly_swappable>; + friend constexpr void iter_swap(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + noexcept(noexcept(ranges::iter_swap(x.@\exposid{current_}@, y.@\exposid{current_}@))) + requires indirectly_swappable>; }; } \end{codeblock} @@ -3691,7 +3691,7 @@ \pnum Let \tcode{C} denote the type -\tcode{iterator_traits>::iterator_category}. +\tcode{iterator_traits>::iterator_category}. If \tcode{C} models \tcode{\libconcept{derived_from}}, then \tcode{iterator_category} denotes \tcode{random_access_iterator_tag}; otherwise, @@ -3699,44 +3699,44 @@ \indexlibrarymember{iterator}{transform_view::iterator} \begin{itemdecl} -constexpr iterator(Parent& parent, iterator_t current); +constexpr @\exposid{iterator}@(@\exposid{Parent}@& parent, iterator_t<@\exposid{Base}@> current); \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{current_} with \tcode{std::move(current)} and -\tcode{parent_} with \tcode{addressof(parent)}. +Initializes \exposid{current_} with \tcode{std::move(current)} and +\exposid{parent_} with \tcode{addressof(parent)}. \end{itemdescr} \indexlibraryctor{transform_view::iterator}% \begin{itemdecl} -constexpr iterator(iterator i) - requires Const && convertible_to, iterator_t>; +constexpr @\exposid{iterator}@(@\exposid{iterator}@ i) + requires Const && convertible_to, iterator_t<@\exposid{Base}@>>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{current_} with \tcode{std::move(i.current_)} and -\tcode{parent_} with \tcode{i.parent_}. +Initializes \exposid{current_} with \tcode{std::move(i.\exposid{current_})} and +\exposid{parent_} with \tcode{i.\exposid{parent_}}. \end{itemdescr} \indexlibrarymember{base}{transform_view::iterator}% \begin{itemdecl} -constexpr iterator_t base() const & - requires copyable>; +constexpr iterator_t<@\exposid{Base}@> base() const & + requires copyable>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return current_;} +Equivalent to: \tcode{return \exposid{current_};} \end{itemdescr} \indexlibrarymember{base}{transform_view::iterator}% \begin{itemdecl} -constexpr iterator_t base() &&; +constexpr iterator_t<@\exposid{Base}@> base() &&; \end{itemdecl} \begin{itemdescr} @@ -3747,7 +3747,7 @@ \indexlibrarymember{operator++}{transform_view::iterator}% \begin{itemdecl} -constexpr iterator& operator++(); +constexpr @\exposid{iterator}@& operator++(); \end{itemdecl} \begin{itemdescr} @@ -3755,7 +3755,7 @@ \effects Equivalent to: \begin{codeblock} -++current_; +++@\exposid{current_}@; return *this; \end{codeblock} \end{itemdescr} @@ -3773,7 +3773,7 @@ \indexlibrarymember{operator++}{transform_view::iterator}% \begin{itemdecl} -constexpr iterator operator++(int) requires forward_range; +constexpr @\exposid{iterator}@ operator++(int) requires forward_range<@\exposid{Base}@>; \end{itemdecl} \begin{itemdescr} @@ -3789,7 +3789,7 @@ \indexlibrarymember{operator\dcr}{transform_view::iterator}% \begin{itemdecl} -constexpr iterator& operator--() requires bidirectional_range; +constexpr @\exposid{iterator}@& operator--() requires bidirectional_range<@\exposid{Base}@>; \end{itemdecl} \begin{itemdescr} @@ -3797,14 +3797,14 @@ \effects Equivalent to: \begin{codeblock} ---current_; +--@\exposid{current_}@; return *this; \end{codeblock} \end{itemdescr} \indexlibrarymember{operator\dcr}{transform_view::iterator}% \begin{itemdecl} -constexpr iterator operator--(int) requires bidirectional_range; +constexpr @\exposid{iterator}@ operator--(int) requires bidirectional_range<@\exposid{Base}@>; \end{itemdecl} \begin{itemdescr} @@ -3820,8 +3820,8 @@ \indexlibrarymember{operator+=}{transform_view::iterator}% \begin{itemdecl} -constexpr iterator& operator+=(difference_type n) - requires random_access_range; +constexpr @\exposid{iterator}@& operator+=(difference_type n) + requires random_access_range<@\exposid{Base}@>; \end{itemdecl} \begin{itemdescr} @@ -3829,15 +3829,15 @@ \effects Equivalent to: \begin{codeblock} -current_ += n; +@\exposid{current_}@ += n; return *this; \end{codeblock} \end{itemdescr} \indexlibrarymember{operator-=}{transform_view::iterator}% \begin{itemdecl} -constexpr iterator& operator-=(difference_type n) - requires random_access_range; +constexpr @\exposid{iterator}@& operator-=(difference_type n) + requires random_access_range<@\exposid{Base}@>; \end{itemdecl} \begin{itemdescr} @@ -3845,39 +3845,39 @@ \effects Equivalent to: \begin{codeblock} -current_ -= n; +@\exposid{current_}@ -= n; return *this; \end{codeblock} \end{itemdescr} \indexlibrarymember{operator==}{transform_view::iterator}% \begin{itemdecl} -friend constexpr bool operator==(const iterator& x, const iterator& y) - requires equality_comparable>; +friend constexpr bool operator==(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires equality_comparable>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.current_ == y.current_;} +Equivalent to: \tcode{return x.\exposid{current_} == y.\exposid{current_};} \end{itemdescr} \indexlibrarymember{operator<}{transform_view::iterator}% \begin{itemdecl} -friend constexpr bool operator<(const iterator& x, const iterator& y) - requires random_access_range; +friend constexpr bool operator<(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{Base}@>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.current_ < y.current_;} +Equivalent to: \tcode{return x.\exposid{current_} < y.\exposid{current_};} \end{itemdescr} \indexlibrarymember{operator>}{transform_view::iterator}% \begin{itemdecl} -friend constexpr bool operator>(const iterator& x, const iterator& y) - requires random_access_range; +friend constexpr bool operator>(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{Base}@>; \end{itemdecl} \begin{itemdescr} @@ -3888,8 +3888,8 @@ \indexlibrarymember{operator<=}{transform_view::iterator}% \begin{itemdecl} -friend constexpr bool operator<=(const iterator& x, const iterator& y) - requires random_access_range; +friend constexpr bool operator<=(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{Base}@>; \end{itemdecl} \begin{itemdescr} @@ -3900,8 +3900,8 @@ \indexlibrarymember{operator>=}{transform_view::iterator}% \begin{itemdecl} -friend constexpr bool operator>=(const iterator& x, const iterator& y) - requires random_access_range; +friend constexpr bool operator>=(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{Base}@>; \end{itemdecl} \begin{itemdescr} @@ -3912,66 +3912,66 @@ \indexlibrarymember{operator<=>}{transform_view::iterator}% \begin{itemdecl} -friend constexpr compare_three_way_result_t> - operator<=>(const iterator& x, const iterator& y) - requires random_access_range && three_way_comparable>; +friend constexpr compare_three_way_result_t> + operator<=>(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{Base}@> && three_way_comparable>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.current_ <=> y.current_;} +Equivalent to: \tcode{return x.\exposid{current_} <=> y.\exposid{current_};} \end{itemdescr} \indexlibrarymember{operator+}{transform_view::iterator}% \begin{itemdecl} -friend constexpr iterator operator+(iterator i, difference_type n) - requires random_access_range; -friend constexpr iterator operator+(difference_type n, iterator i) - requires random_access_range; +friend constexpr @\exposid{iterator}@ operator+(@\exposid{iterator}@ i, difference_type n) + requires random_access_range<@\exposid{Base}@>; +friend constexpr @\exposid{iterator}@ operator+(difference_type n, @\exposid{iterator}@ i) + requires random_access_range<@\exposid{Base}@>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return iterator\{*i.parent_, i.current_ + n\};} +Equivalent to: \tcode{return iterator\{*i.\exposid{parent_}, i.\exposid{current_} + n\};} \end{itemdescr} \indexlibrarymember{operator-}{transform_view::iterator}% \begin{itemdecl} -friend constexpr iterator operator-(iterator i, difference_type n) - requires random_access_range; +friend constexpr @\exposid{iterator}@ operator-(@\exposid{iterator}@ i, difference_type n) + requires random_access_range<@\exposid{Base}@>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return iterator\{*i.parent_, i.current_ - n\};} +Equivalent to: \tcode{return iterator\{*i.\exposid{parent_}, i.\exposid{current_} - n\};} \end{itemdescr} \indexlibrarymember{operator-}{transform_view::iterator}% \begin{itemdecl} -friend constexpr difference_type operator-(const iterator& x, const iterator& y) - requires random_access_range; +friend constexpr difference_type operator-(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{Base}@>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.current_ - y.current_;} +Equivalent to: \tcode{return x.\exposid{current_} - y.\exposid{current_};} \end{itemdescr} \indexlibrarymember{iter_swap}{transform_view::iterator}% \begin{itemdecl} -friend constexpr void iter_swap(const iterator& x, const iterator& y) - noexcept(noexcept(ranges::iter_swap(x.current_, y.current_))) - requires indirectly_swappable>; +friend constexpr void iter_swap(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + noexcept(noexcept(ranges::iter_swap(x.\exposid{current_}, y.\exposid{current_}))) + requires indirectly_swappable>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to \tcode{ranges::iter_swap(x.current_, y.current_)}. +Equivalent to \tcode{ranges::iter_swap(x.\exposid{current_}, y.\exposid{current_})}. \end{itemdescr} @@ -3982,101 +3982,101 @@ namespace std::ranges { template template - class transform_view::sentinel { + class transform_view::@\exposid{sentinel}@ { private: - using Parent = // \expos + using @\exposid{Parent}@ = // \expos conditional_t; - using Base = conditional_t; // \expos - sentinel_t end_ = sentinel_t(); // \expos + using @\exposid{Base}@ = conditional_t; // \expos + sentinel_t<@\exposid{Base}@> @\exposid{end_}@ = sentinel_t<@\exposid{Base}@>(); // \expos public: - sentinel() = default; - constexpr explicit sentinel(sentinel_t end); - constexpr sentinel(sentinel i) - requires Const && convertible_to, sentinel_t>; + @\exposid{sentinel}@() = default; + constexpr explicit @\exposid{sentinel}@(sentinel_t<@\exposid{Base}@> end); + constexpr @\exposid{sentinel}@(@\exposid{sentinel}@ i) + requires Const && convertible_to, sentinel_t<@\exposid{Base}@>>; - constexpr sentinel_t base() const; + constexpr sentinel_t<@\exposid{Base}@> base() const; - friend constexpr bool operator==(const iterator& x, const sentinel& y); + friend constexpr bool operator==(const @\exposid{iterator}@& x, const @\exposid{sentinel}@& y); - friend constexpr range_difference_t - operator-(const iterator& x, const sentinel& y) - requires sized_sentinel_for, iterator_t>; - friend constexpr range_difference_t - operator-(const sentinel& y, const iterator& x) - requires sized_sentinel_for, iterator_t>; + friend constexpr range_difference_t<@\exposid{Base}@> + operator-(const @\exposid{iterator}@& x, const @\exposid{sentinel}@& y) + requires sized_sentinel_for, iterator_t<@\exposid{Base}@>>; + friend constexpr range_difference_t<@\exposid{Base}@> + operator-(const @\exposid{sentinel}@& y, const @\exposid{iterator}@& x) + requires sized_sentinel_for, iterator_t<@\exposid{Base}@>>; }; } \end{codeblock} \indexlibraryctor{transform_view::sentinel}% \begin{itemdecl} -constexpr explicit sentinel(sentinel_t end); +constexpr explicit @\exposid{sentinel}@(sentinel_t<@\exposid{Base}@> end); \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{end_} with \tcode{end}. +Initializes \exposid{end_} with \tcode{end}. \end{itemdescr} \indexlibraryctor{transform_view::sentinel}% \begin{itemdecl} -constexpr sentinel(sentinel i) - requires Const && convertible_to, sentinel_t>; +constexpr @\exposid{sentinel}@(@\exposid{sentinel}@ i) + requires Const && convertible_to, sentinel_t<@\exposid{Base}@>>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{end_} with \tcode{std::move(i.end_)}. +Initializes \exposid{end_} with \tcode{std::move(i.\exposid{end_})}. \end{itemdescr} \indexlibrarymember{base}{transform_view::sentinel} \begin{itemdecl} -constexpr sentinel_t base() const; +constexpr sentinel_t<@\exposid{Base}@> base() const; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return end_;} +Equivalent to: \tcode{return \exposid{end_};} \end{itemdescr} \indexlibrarymember{operator==}{transform_view::sentinel} \begin{itemdecl} -friend constexpr bool operator==(const iterator& x, const sentinel& y); +friend constexpr bool operator==(const @\exposid{iterator}@& x, const @\exposid{sentinel}@& y); \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.current_ == y.end_;} +Equivalent to: \tcode{return x.\exposid{current_} == y.\exposid{end_};} \end{itemdescr} \indexlibrarymember{operator-}{transform_view::sentinel}% \begin{itemdecl} -friend constexpr range_difference_t - operator-(const iterator& x, const sentinel& y) - requires sized_sentinel_for, iterator_t>; +friend constexpr range_difference_t<@\exposid{Base}@> + operator-(const @\exposid{iterator}@& x, const @\exposid{sentinel}@& y) + requires sized_sentinel_for, iterator_t<@\exposid{Base}@>>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.current_ - y.end_;} +Equivalent to: \tcode{return x.\exposid{current_} - y.\exposid{end_};} \end{itemdescr} \indexlibrarymember{operator-}{transform_view::sentinel}% \begin{itemdecl} -friend constexpr range_difference_t - operator-(const sentinel& y, const iterator& x) - requires sized_sentinel_for, iterator_t>; +friend constexpr range_difference_t<@\exposid{Base}@> + operator-(const @\exposid{sentinel}@& y, const @\exposid{iterator}@& x) + requires sized_sentinel_for, iterator_t<@\exposid{Base}@>>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.end_ - y.current_;} +Equivalent to: \tcode{return x.\exposid{end_} - y.\exposid{current_};} \end{itemdescr} \rSec3[range.transform.adaptor]{\tcode{views::transform}} @@ -4120,10 +4120,10 @@ template class take_view : public view_interface> { private: - V base_ = V(); // \expos - range_difference_t count_ = 0; // \expos + V @\exposid{base_}@ = V(); // \expos + range_difference_t @\exposid{count_}@ = 0; // \expos // \ref{range.take.sentinel}, class template \tcode{take_view::sentinel} - template struct sentinel; // \expos + template struct @\exposid{sentinel}@; // \expos public: take_view() = default; constexpr take_view(V base, range_difference_t count); @@ -4131,57 +4131,57 @@ requires constructible_from> constexpr take_view(R&& r, range_difference_t count); - constexpr V base() const& requires copy_constructible { return base_; } - constexpr V base() && { return std::move(base_); } + constexpr V base() const& requires copy_constructible { return @\exposid{base_}@; } + constexpr V base() && { return std::move(@\exposid{base_}@); } constexpr auto begin() requires (!@\placeholder{simple-view}@) { if constexpr (sized_range) { if constexpr (random_access_range) - return ranges::begin(base_); + return ranges::begin(@\exposid{base_}@); else - return counted_iterator{ranges::begin(base_), size()}; + return counted_iterator{ranges::begin(@\exposid{base_}@), size()}; } else - return counted_iterator{ranges::begin(base_), count_}; + return counted_iterator{ranges::begin(@\exposid{base_}@), @\exposid{count_}@}; } constexpr auto begin() const requires range { if constexpr (sized_range) { if constexpr (random_access_range) - return ranges::begin(base_); + return ranges::begin(@\exposid{base_}@); else - return counted_iterator{ranges::begin(base_), size()}; + return counted_iterator{ranges::begin(@\exposid{base_}@), size()}; } else - return counted_iterator{ranges::begin(base_), count_}; + return counted_iterator{ranges::begin(@\exposid{base_}@), @\exposid{count_}@}; } constexpr auto end() requires (!@\placeholder{simple-view}@) { if constexpr (sized_range) { if constexpr (random_access_range) - return ranges::begin(base_) + size(); + return ranges::begin(@\exposid{base_}@) + size(); else return default_sentinel; } else - return sentinel{ranges::end(base_)}; + return @\exposid{sentinel}@{ranges::end(@\exposid{base_}@)}; } constexpr auto end() const requires range { if constexpr (sized_range) { if constexpr (random_access_range) - return ranges::begin(base_) + size(); + return ranges::begin(@\exposid{base_}@) + size(); else return default_sentinel; } else - return sentinel{ranges::end(base_)}; + return @\exposid{sentinel}@{ranges::end(@\exposid{base_}@)}; } constexpr auto size() requires sized_range { - auto n = ranges::size(base_); - return ranges::min(n, static_cast(count_)); + auto n = ranges::size(@\exposid{base_}@); + return ranges::min(n, static_cast(@\exposid{count_}@)); } constexpr auto size() const requires sized_range { - auto n = ranges::size(base_); - return ranges::min(n, static_cast(count_)); + auto n = ranges::size(@\exposid{base_}@); + return ranges::min(n, static_cast(@\exposid{count_}@)); } }; @@ -4199,8 +4199,8 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{base_} with \tcode{std::move(base)} and -\tcode{count_} with \tcode{count}. +Initializes \exposid{base_} with \tcode{std::move(base)} and +\exposid{count_} with \tcode{count}. \end{itemdescr} \indexlibraryctor{take_view}% @@ -4213,8 +4213,8 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{base_} with \tcode{views::all(std::forward(r))} -and \tcode{count_} with \tcode{count}. +Initializes \exposid{base_} with \tcode{views::all(std::forward(r))} +and \exposid{count_} with \tcode{count}. \end{itemdescr} \rSec3[range.take.sentinel]{Class template \tcode{take_view::sentinel}} @@ -4224,68 +4224,68 @@ namespace std::ranges { template template - class take_view::sentinel { + class take_view::@\exposid{sentinel}@ { private: - using Base = conditional_t; // \expos - using CI = counted_iterator>; // \expos - sentinel_t end_ = sentinel_t(); // \expos + using @\exposid{Base}@ = conditional_t; // \expos + using CI = counted_iterator>; // \expos + sentinel_t<@\exposid{Base}@> @\exposid{end_}@ = sentinel_t<@\exposid{Base}@>(); // \expos public: - sentinel() = default; - constexpr explicit sentinel(sentinel_t end); - constexpr sentinel(sentinel s) - requires Const && convertible_to, sentinel_t>; + @\exposid{sentinel}@() = default; + constexpr explicit @\exposid{sentinel}@(sentinel_t<@\exposid{Base}@> end); + constexpr @\exposid{sentinel}@(@\exposid{sentinel}@ s) + requires Const && convertible_to, sentinel_t<@\exposid{Base}@>>; - constexpr sentinel_t base() const; + constexpr sentinel_t<@\exposid{Base}@> base() const; - friend constexpr bool operator==(const CI& y, const sentinel& x); + friend constexpr bool operator==(const CI& y, const @\exposid{sentinel}@& x); }; } \end{codeblock} \indexlibraryctor{take_view::sentinel}% \begin{itemdecl} -constexpr explicit sentinel(sentinel_t end); +constexpr explicit @\exposid{sentinel}@(sentinel_t<@\exposid{Base}@> end); \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{end_} with \tcode{end}. +Initializes \exposid{end_} with \tcode{end}. \end{itemdescr} \indexlibraryctor{take_view::sentinel}% \begin{itemdecl} -constexpr sentinel(sentinel s) - requires Const && convertible_to, sentinel_t>; +constexpr @\exposid{sentinel}@(@\exposid{sentinel}@ s) + requires Const && convertible_to, sentinel_t<@\exposid{Base}@>>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{end_} with \tcode{std::move(s.end_)}. +Initializes \exposid{end_} with \tcode{std::move(s.\exposid{end_})}. \end{itemdescr} \indexlibrarymember{base}{take_view::sentinel}% \begin{itemdecl} -constexpr sentinel_t base() const; +constexpr sentinel_t<@\exposid{Base}@> base() const; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return end_;} +Equivalent to: \tcode{return \exposid{end_};} \end{itemdescr} \indexlibrarymember{operator==}{take_view::sentinel}% \begin{itemdecl} -friend constexpr bool operator==(const CI& y, const sentinel& x); +friend constexpr bool operator==(const CI& y, const @\exposid{sentinel}@& x); \end{itemdecl} \begin{itemdescr} \pnum \effects Equivalent to: -\tcode{return y.count() == 0 || y.base() == x.end_;} +\tcode{return y.count() == 0 || y.base() == x.\exposid{end_};} \end{itemdescr} \rSec3[range.take.adaptor]{\tcode{views::take}} @@ -4333,31 +4333,31 @@ requires input_range && is_object_v && indirect_unary_predicate> class take_while_view : public view_interface> { - template class sentinel; // \expos + template class @\exposid{sentinel}@; // \expos - V base_; // \expos - @\placeholder{semiregular-box}@ pred_; @\itcorr[-1]@ // \expos + V @\exposid{base_}@; // \expos + @\placeholder{semiregular-box}@ @\exposid{pred_}@; @\itcorr[-1]@ // \expos public: take_while_view() = default; constexpr take_while_view(V base, Pred pred); - constexpr V base() const& requires copy_constructible { return base_; } - constexpr V base() && { return std::move(base_); } + constexpr V base() const& requires copy_constructible { return @\exposid{base_}@; } + constexpr V base() && { return std::move(@\exposid{base_}@); } constexpr const Pred& pred() const; constexpr auto begin() requires (!@\placeholder{simple-view}@) - { return ranges::begin(base_); } + { return ranges::begin(@\exposid{base_}@); } constexpr auto begin() const requires range - { return ranges::begin(base_); } + { return ranges::begin(@\exposid{base_}@); } constexpr auto end() requires (!@\placeholder{simple-view}@) - { return sentinel(ranges::end(base_), addressof(*pred_)); } + { return @\exposid{sentinel}@(ranges::end(@\exposid{base_}@), addressof(*@\exposid{pred_}@)); } constexpr auto end() const requires range - { return sentinel(ranges::end(base_), addressof(*pred_)); } + { return @\exposid{sentinel}@(ranges::end(@\exposid{base_}@), addressof(*@\exposid{pred_}@)); } }; template @@ -4373,8 +4373,8 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{base_} with \tcode{std::move(base)} and -\tcode{pred_} with \tcode{std::move(pred)}. +Initializes \exposid{base_} with \tcode{std::move(base)} and +\exposid{pred_} with \tcode{std::move(pred)}. \end{itemdescr} \indexlibrarymember{pred}{take_while_view}% @@ -4385,7 +4385,7 @@ \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return *pred_;} +Equivalent to: \tcode{return *\exposid{pred_};} \end{itemdescr} \rSec3[range.take.while.sentinel]{Class template \tcode{take_while_view::sentinel}} @@ -4395,58 +4395,58 @@ namespace std::ranges { template template - class take_while_view::sentinel { // \expos - using base_t = conditional_t; // \expos + class take_while_view::@\exposid{sentinel}@ { // \expos + using @\exposid{base-t}@ = conditional_t; // \expos - sentinel_t end_ = sentinel_t(); // \expos - const Pred* pred_{}; // \expos + sentinel_t<@\exposid{base-t}@> @\exposid{end_}@ = sentinel_t<@\exposid{base-t}@>(); // \expos + const Pred* @\exposid{pred_}@{}; // \expos public: - sentinel() = default; - constexpr explicit sentinel(sentinel_t end, const Pred* pred); - constexpr sentinel(sentinel s) - requires Const && convertible_to, sentinel_t>; + @\exposid{sentinel}@() = default; + constexpr explicit @\exposid{sentinel}@(sentinel_t<@\exposid{base-t}@> end, const Pred* pred); + constexpr @\exposid{sentinel}@(@\exposid{sentinel}@ s) + requires Const && convertible_to, sentinel_t<@\exposid{base-t}@>>; - constexpr sentinel_t base() const { return end_; } + constexpr sentinel_t<@\exposid{base-t}@> base() const { return @\exposid{end_}@; } - friend constexpr bool operator==(const iterator_t& x, const sentinel& y); + friend constexpr bool operator==(const iterator_t<@\exposid{base-t}@>& x, const @\exposid{sentinel}@& y); }; } \end{codeblock} \indexlibraryctor{take_while_view::sentinel}% \begin{itemdecl} -constexpr explicit sentinel(sentinel_t end, const Pred* pred); +constexpr explicit @\exposid{sentinel}@(sentinel_t<@\exposid{base-t}@> end, const Pred* pred); \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{end_} with \tcode{end} and \tcode{pred_} with \tcode{pred}. +Initializes \exposid{end_} with \tcode{end} and \exposid{pred_} with \tcode{pred}. \end{itemdescr} \indexlibraryctor{take_while_view::sentinel}% \begin{itemdecl} -constexpr sentinel(sentinel s) - requires Const && convertible_to, sentinel_t>; +constexpr @\exposid{sentinel}@(@\exposid{sentinel}@ s) + requires Const && convertible_to, sentinel_t<@\exposid{base-t}@>>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{end_} with \tcode{s.end_} and -\tcode{pred_} with \tcode{s.pred_}. +Initializes \exposid{end_} with \tcode{s.\exposid{end_}} and +\exposid{pred_} with \tcode{s.pred_}. \end{itemdescr} \indexlibrarymember{operator==}{take_while_view::sentinel}% \begin{itemdecl} -friend constexpr bool operator==(const iterator_t& x, const sentinel& y); +friend constexpr bool operator==(const iterator_t<@\exposid{base-t}@>& x, const @\exposid{sentinel}@& y); \end{itemdecl} \begin{itemdescr} \pnum \effects Equivalent to: -\tcode{return y.end_ == x || !invoke(*y.pred_, *x);} +\tcode{return y.\exposid{end_} == x || !invoke(*y.pred_, *x);} \end{itemdescr} \rSec3[range.take.while.adaptor]{\tcode{views::take_while}} @@ -4493,8 +4493,8 @@ drop_view() = default; constexpr drop_view(V base, range_difference_t count); - constexpr V base() const& requires copy_constructible { return base_; } - constexpr V base() && { return std::move(base_); } + constexpr V base() const& requires copy_constructible { return @\exposid{base_}@; } + constexpr V base() && { return std::move(@\exposid{base_}@); } constexpr auto begin() requires (!(@\placeholder{simple-view}@ && random_access_range)); @@ -4503,30 +4503,30 @@ constexpr auto end() requires (!@\placeholder{simple-view}@) - { return ranges::end(base_); } + { return ranges::end(@\exposid{base_}@); } constexpr auto end() const requires range - { return ranges::end(base_); } + { return ranges::end(@\exposid{base_}@); } constexpr auto size() requires sized_range { - const auto s = ranges::size(base_); - const auto c = static_cast(count_); + const auto s = ranges::size(@\exposid{base_}@); + const auto c = static_cast(@\exposid{count_}@); return s < c ? 0 : s - c; } constexpr auto size() const requires sized_range { - const auto s = ranges::size(base_); - const auto c = static_cast(count_); + const auto s = ranges::size(@\exposid{base_}@); + const auto c = static_cast(@\exposid{count_}@); return s < c ? 0 : s - c; } private: - V base_; // \expos - range_difference_t count_; // \expos + V @\exposid{base_}@; // \expos + range_difference_t @\exposid{count_}@; // \expos }; template @@ -4546,8 +4546,8 @@ \pnum \effects -Initializes \tcode{base_} with \tcode{std::move(base)} and -\tcode{count_} with \tcode{count}. +Initializes \exposid{base_} with \tcode{std::move(base)} and +\exposid{count_} with \tcode{count}. \end{itemdescr} \indexlibrarymember{begin}{drop_view}% @@ -4622,19 +4622,19 @@ drop_while_view() = default; constexpr drop_while_view(V base, Pred pred); - constexpr V base() const& requires copy_constructible { return base_; } - constexpr V base() && { return std::move(base_); } + constexpr V base() const& requires copy_constructible { return @\exposid{base_}@; } + constexpr V base() && { return std::move(@\exposid{base_}@); } constexpr const Pred& pred() const; constexpr auto begin(); constexpr auto end() - { return ranges::end(base_); } + { return ranges::end(@\exposid{base_}@); } private: - V base_; // \expos - @\placeholder{semiregular-box}@ pred_; @\itcorr[-1]@ // \expos + V @\exposid{base_}@; // \expos + @\placeholder{semiregular-box}@ @\exposid{pred_}@; @\itcorr[-1]@ // \expos }; template @@ -4650,8 +4650,8 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{base_} with \tcode{std::move(base)} and -\tcode{pred_} with \tcode{std::move(pred)}. +Initializes \exposid{base_} with \tcode{std::move(base)} and +\exposid{pred_} with \tcode{std::move(pred)}. \end{itemdescr} \indexlibrarymember{pred}{drop_while_view}% @@ -4662,7 +4662,7 @@ \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return *pred_;} +Equivalent to: \tcode{return *\exposid{pred_};} \end{itemdescr} \indexlibrarymember{begin}{drop_while_view}% @@ -4730,18 +4730,18 @@ view>) class join_view : public view_interface> { private: - using InnerRng = // \expos + using @\exposid{InnerRng}@ = // \expos range_reference_t; // \ref{range.join.iterator}, class template \tcode{join_view::iterator} template - struct iterator; // \expos + struct @\exposid{iterator}@; // \expos // \ref{range.join.sentinel}, class template \tcode{join_view::sentinel} template - struct sentinel; // \expos + struct @\exposid{sentinel}@; // \expos - V base_ = V(); // \expos - all_view inner_ = // \expos, present only when \tcode{!is_reference_v} - all_view(); + V @\exposid{base_}@ = V(); // \expos + all_view<@\exposid{InnerRng}@> @\exposid{inner_}@ = // \expos, present only when \tcode{!is_reference_v<\exposid{InnerRng}>} + all_view<@\exposid{InnerRng}@>(); public: join_view() = default; constexpr explicit join_view(V base); @@ -4750,26 +4750,26 @@ requires viewable_range && constructible_from> constexpr explicit join_view(R&& r); - constexpr V base() const& requires copy_constructible { return base_; } - constexpr V base() && { return std::move(base_); } + constexpr V base() const& requires copy_constructible { return @\exposid{base_}@; } + constexpr V base() && { return std::move(@\exposid{base_}@); } constexpr auto begin() { - return iterator<@\placeholder{simple-view}@>{*this, ranges::begin(base_)}; + return @\exposid{iterator}@<@\placeholder{simple-view}@>{*this, ranges::begin(@\exposid{base_}@)}; } constexpr auto begin() const requires input_range && is_reference_v> { - return iterator{*this, ranges::begin(base_)}; + return @\exposid{iterator}@{*this, ranges::begin(@\exposid{base_}@)}; } constexpr auto end() { if constexpr (forward_range && - is_reference_v && forward_range && - common_range && common_range) - return iterator<@\placeholder{simple-view}@>{*this, ranges::end(base_)}; + is_reference_v<@\exposid{InnerRng}@> && forward_range<@\exposid{InnerRng}@> && + common_range && common_range<@\exposid{InnerRng}@>) + return @\exposid{iterator}@<@\placeholder{simple-view}@>{*this, ranges::end(@\exposid{base_}@)}; else - return sentinel<@\placeholder{simple-view}@>{*this}; + return @\exposid{sentinel}@<@\placeholder{simple-view}@>{*this}; } constexpr auto end() const @@ -4780,9 +4780,9 @@ forward_range> && common_range && common_range>) - return iterator{*this, ranges::end(base_)}; + return @\exposid{iterator}@{*this, ranges::end(@\exposid{base_}@)}; else - return sentinel{*this}; + return @\exposid{sentinel}@{*this}; } }; @@ -4799,7 +4799,7 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{base_} with \tcode{std::move(base)}. +Initializes \exposid{base_} with \tcode{std::move(base)}. \end{itemdescr} \indexlibraryctor{join_view}% @@ -4812,7 +4812,7 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{base_} with \tcode{views::all(std::forward(r))}. +Initializes \exposid{base_} with \tcode{views::all(std::forward(r))}. \end{itemdescr} \rSec3[range.join.iterator]{Class template \tcode{join_view::iterator}} @@ -4822,65 +4822,65 @@ namespace std::ranges { template template - struct join_view::iterator { + struct join_view::@\exposid{iterator}@ { private: - using Parent = // \expos + using @\exposid{Parent}@ = // \expos conditional_t; - using Base = conditional_t; // \expos + using @\exposid{Base}@ = conditional_t; // \expos - static constexpr bool ref_is_glvalue = // \expos - is_reference_v>; + static constexpr bool @\exposid{ref-is-glvalue}@ = // \expos + is_reference_v>; - iterator_t outer_ = iterator_t(); // \expos - iterator_t> inner_ = // \expos - iterator_t>(); - Parent* parent_ = nullptr; // \expos + iterator_t<@\exposid{Base}@> @\exposid{outer_}@ = iterator_t<@\exposid{Base}@>(); // \expos + iterator_t> @\exposid{inner_}@ = // \expos + iterator_t>(); + @\exposid{Parent}@* @\exposid{parent_}@ = nullptr; // \expos - constexpr void satisfy(); // \expos + constexpr void @\exposid{satisfy}@(); // \expos public: using iterator_concept = @\seebelow@; using iterator_category = @\seebelow@; - using value_type = range_value_t>; + using value_type = range_value_t>; using difference_type = @\seebelow@; - iterator() = default; - constexpr iterator(Parent& parent, iterator_t outer); - constexpr iterator(iterator i) + @\exposid{iterator}@() = default; + constexpr @\exposid{iterator}@(@\exposid{Parent}@& parent, iterator_t outer); + constexpr @\exposid{iterator}@(@\exposid{iterator}@ i) requires Const && - convertible_to, iterator_t> && - convertible_to, - iterator_t>>; + convertible_to, iterator_t<@\exposid{Base}@>> && + convertible_to, + iterator_t>>; - constexpr decltype(auto) operator*() const { return *inner_; } + constexpr decltype(auto) operator*() const { return *@\exposid{inner_}@; } - constexpr iterator_t operator->() const - requires @\placeholder{has-arrow}@> && copyable>; + constexpr iterator_t<@\exposid{Base}@> operator->() const + requires @\placeholder{has-arrow}@> && copyable>; - constexpr iterator& operator++(); + constexpr @\exposid{iterator}@& operator++(); constexpr void operator++(int); - constexpr iterator operator++(int) - requires ref_is_glvalue && forward_range && - forward_range>; + constexpr @\exposid{iterator}@ operator++(int) + requires @\exposid{ref-is-glvalue}@ && forward_range<@\exposid{Base}@> && + forward_range>; - constexpr iterator& operator--() - requires ref_is_glvalue && bidirectional_range && - bidirectional_range>; + constexpr @\exposid{iterator}@& operator--() + requires @\exposid{ref-is-glvalue}@ && bidirectional_range<@\exposid{Base}@> && + bidirectional_range>; - constexpr iterator operator--(int) - requires ref_is_glvalue && bidirectional_range && - bidirectional_range>; + constexpr @\exposid{iterator}@ operator--(int) + requires @\exposid{ref-is-glvalue}@ && bidirectional_range<@\exposid{Base}@> && + bidirectional_range>; - friend constexpr bool operator==(const iterator& x, const iterator& y) - requires ref_is_glvalue && equality_comparable> && - equality_comparable>>; + friend constexpr bool operator==(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires @\exposid{ref-is-glvalue}@ && equality_comparable> && + equality_comparable>>; - friend constexpr decltype(auto) iter_move(const iterator& i) - noexcept(noexcept(ranges::iter_move(i.inner_))) { - return ranges::iter_move(i.inner_); + friend constexpr decltype(auto) iter_move(const @\exposid{iterator}@& i) + noexcept(noexcept(ranges::iter_move(i.@\exposid{inner_}@))) { + return ranges::iter_move(i.@\exposid{inner_}@); } - friend constexpr void iter_swap(const iterator& x, const iterator& y) - noexcept(noexcept(ranges::iter_swap(x.inner_, y.inner_))); + friend constexpr void iter_swap(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + noexcept(noexcept(ranges::iter_swap(x.@\exposid{inner_}@, y.@\exposid{inner_}@))); }; } \end{codeblock} @@ -4888,13 +4888,13 @@ \pnum \tcode{iterator::iterator_concept} is defined as follows: \begin{itemize} -\item If \tcode{ref_is_glvalue} is \tcode{true} and - \tcode{Base} and \tcode{range_reference_t} each model +\item If \exposid{ref-is-glvalue} is \tcode{true} and + \exposid{Base} and \tcode{range_reference_t<\exposid{Base}>} each model \libconcept{bidirectional_range}, then \tcode{iterator_concept} denotes \tcode{bidirectional_iterator_tag}. -\item Otherwise, if \tcode{ref_is_glvalue} is \tcode{true} and - \tcode{Base} and \tcode{range_reference_t} - each model \libconcept{forward_range}, then \tcode{iterator_concept} denotes +\item Otherwise, if \exposid{ref-is-glvalue} is \tcode{true} and + \exposid{Base} and \tcode{range_reference_t<\exposid{Base}>} + each model \libconceptx{for\-ward_range}{forward_range}, then \tcode{iterator_concept} denotes \tcode{forward_iterator_tag}. \item Otherwise, \tcode{iterator_concept} denotes \tcode{input_iterator_tag}. \end{itemize} @@ -4903,14 +4903,14 @@ \tcode{iterator::iterator_category} is defined as follows: \begin{itemize} \item Let \placeholder{OUTERC} denote - \tcode{iterator_traits>::iterator_category}, and + \tcode{iterator_traits>::iterator_category}, and let \placeholder{INNERC} denote - \tcode{iterator_traits>>::iterator_category}. -\item If \tcode{ref_is_glvalue} is \tcode{true} and + \tcode{iterator_traits>>::iterator_category}. +\item If \exposid{ref-is-glvalue} is \tcode{true} and \placeholder{OUTERC} and \placeholder{INNERC} each model \tcode{derived_from}, \tcode{iterator_category} denotes \tcode{bidirectional_iterator_tag}. -\item Otherwise, if \tcode{ref_is_glvalue} is \tcode{true} and +\item Otherwise, if \exposid{ref-is-glvalue} is \tcode{true} and \placeholder{OUTERC} and \placeholder{INNERC} each model \tcode{derived_from}, \tcode{iterator_category} denotes \tcode{forward_iterator_tag}. @@ -4924,8 +4924,8 @@ \tcode{iterator::difference_type} denotes the type: \begin{codeblock} common_type_t< - range_difference_t, - range_difference_t>> + range_difference_t<@\exposid{Base}@>, + range_difference_t>> \end{codeblock} \pnum @@ -4933,7 +4933,7 @@ empty inner ranges. \begin{itemdecl} -constexpr void satisfy(); // \expos +constexpr void @\exposid{satisfy}@(); // \expos \end{itemdecl} \begin{itemdescr} @@ -4941,76 +4941,76 @@ \effects Equivalent to: \begin{codeblock} -auto update_inner = [this](range_reference_t x) -> auto& { - if constexpr (ref_is_glvalue) // \tcode{x} is a reference +auto update_inner = [this](range_reference_t<@\exposid{Base}@> x) -> auto& { + if constexpr (@\exposid{ref-is-glvalue}@) // \tcode{x} is a reference return x; else - return (parent_->inner_ = views::all(std::move(x))); + return (@\exposid{parent_}@->@\exposid{inner_}@ = views::all(std::move(x))); }; -for (; outer_ != ranges::end(parent_->base_); ++outer_) { - auto& inner = update_inner(*outer_); - inner_ = ranges::begin(inner); - if (inner_ != ranges::end(inner)) +for (; @\exposid{outer_}@ != ranges::end(@\exposid{parent_}@->@\exposid{base_}@); ++@\exposid{outer_}@) { + auto& inner = update_inner(*@\exposid{outer_}@); + @\exposid{inner_}@ = ranges::begin(inner); + if (@\exposid{inner_}@ != ranges::end(inner)) return; } -if constexpr (ref_is_glvalue) - inner_ = iterator_t>(); +if constexpr (@\exposid{ref-is-glvalue}@) + @\exposid{inner_}@ = iterator_t>(); \end{codeblock} \end{itemdescr} \indexlibraryctor{join_view::iterator}% \begin{itemdecl} -constexpr iterator(Parent& parent, iterator_t outer) +constexpr @\exposid{iterator}@(@\exposid{Parent}@& parent, iterator_t outer) \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{outer_} with \tcode{std::move(outer)} and -\tcode{parent_} with \tcode{addressof(parent)}; then calls \tcode{satisfy()}. +Initializes \exposid{outer_} with \tcode{std::move(outer)} and +\exposid{parent_} with \tcode{addressof(parent)}; then calls \tcode{\exposid{satisfy}()}. \end{itemdescr} \indexlibraryctor{join_view::iterator}% \begin{itemdecl} -constexpr iterator(iterator i) +constexpr @\exposid{iterator}@(@\exposid{iterator}@ i) requires Const && - convertible_to, iterator_t> && - convertible_to, - iterator_t>>; + convertible_to, iterator_t<@\exposid{Base}@>> && + convertible_to, + iterator_t>>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{outer_} with \tcode{std::move(i.outer_)}, -\tcode{inner_} with \tcode{std::move(i.inner_)}, and -\tcode{parent_} with \tcode{i.parent_}. +Initializes \exposid{outer_} with \tcode{std::move(i.\exposid{outer_})}, +\exposid{inner_} with \tcode{std::move(i.\exposid{inner_})}, and +\exposid{parent_} with \tcode{i.\exposid{parent_}}. \end{itemdescr} \indexlibrarymember{operator->}{join_view::iterator}% \begin{itemdecl} -constexpr iterator_t operator->() const - requires @\placeholder{has-arrow}@> && copyable>; +constexpr iterator_t<@\exposid{Base}@> operator->() const + requires @\placeholder{has-arrow}@> && copyable>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to \tcode{return inner_;} +Equivalent to \tcode{return \exposid{inner_};} \end{itemdescr} \indexlibrarymember{operator++}{join_view::iterator}% \begin{itemdecl} -constexpr iterator& operator++(); +constexpr @\exposid{iterator}@& operator++(); \end{itemdecl} \begin{itemdescr} \pnum Let \tcode{\placeholder{inner-range}} be: \begin{itemize} -\item If \tcode{ref_is_glvalue} is \tcode{true}, \tcode{*outer_}. -\item Otherwise, \tcode{parent_->inner_}. +\item If \exposid{ref-is-glvalue} is \tcode{true}, \tcode{*outer_}. +\item Otherwise, \tcode{\exposid{parent_}->inner_}. \end{itemize} \pnum @@ -5018,9 +5018,9 @@ Equivalent to: \begin{codeblock} auto&& inner_rng = @\placeholder{inner-range}@; -if (++inner_ == ranges::end(inner_rng)) { - ++outer_; - satisfy(); +if (++@\exposid{inner_}@ == ranges::end(inner_rng)) { + ++@\exposid{outer_}@; + @\exposid{satisfy}@(); } return *this; \end{codeblock} @@ -5039,9 +5039,9 @@ \indexlibrarymember{operator++}{join_view::iterator}% \begin{itemdecl} -constexpr iterator operator++(int) - requires ref_is_glvalue && forward_range && - forward_range>; +constexpr @\exposid{iterator}@ operator++(int) + requires @\exposid{ref-is-glvalue}@ && forward_range<@\exposid{Base}@> && + forward_range>; \end{itemdecl} \begin{itemdescr} @@ -5057,9 +5057,9 @@ \indexlibrarymember{operator\dcr}{join_view::iterator}% \begin{itemdecl} -constexpr iterator& operator--() - requires ref_is_glvalue && bidirectional_range && - bidirectional_range>; +constexpr @\exposid{iterator}@& operator--() + requires @\exposid{ref-is-glvalue}@ && bidirectional_range<@\exposid{Base}@> && + bidirectional_range>; \end{itemdecl} \begin{itemdescr} @@ -5067,20 +5067,20 @@ \effects Equivalent to: \begin{codeblock} -if (outer_ == ranges::end(parent_->base_)) - inner_ = ranges::end(*--outer_); -while (inner_ == ranges::begin(*outer_)) - inner_ = ranges::end(*--outer_); ---inner_; +if (@\exposid{outer_}@ == ranges::end(@\exposid{parent_}@->@\exposid{base_}@)) + @\exposid{inner_}@ = ranges::end(*--@\exposid{outer_}@); +while (@\exposid{inner_}@ == ranges::begin(*@\exposid{outer_}@)) + @\exposid{inner_}@ = ranges::end(*--@\exposid{outer_}@); +--@\exposid{inner_}@; return *this; \end{codeblock} \end{itemdescr} \indexlibrarymember{operator\dcr}{join_view::iterator}% \begin{itemdecl} -constexpr iterator operator--(int) - requires ref_is_glvalue && bidirectional_range && - bidirectional_range>; +constexpr @\exposid{iterator}@ operator--(int) + requires @\exposid{ref-is-glvalue}@ && bidirectional_range<@\exposid{Base}@> && + bidirectional_range>; \end{itemdecl} \begin{itemdescr} @@ -5096,28 +5096,28 @@ \indexlibrarymember{operator==}{join_view::iterator}% \begin{itemdecl} -friend constexpr bool operator==(const iterator& x, const iterator& y) - requires ref_is_glvalue && equality_comparable> && - equality_comparable>>; +friend constexpr bool operator==(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires @\exposid{ref-is-glvalue}@ && equality_comparable> && + equality_comparable>>; \end{itemdecl} \begin{itemdescr} \pnum \effects Equivalent to: -\tcode{return x.outer_ == y.outer_ \&\& x.inner_ == y.inner_;} +\tcode{return x.\exposid{outer_} == y.\exposid{outer_} \&\& x.\exposid{inner_} == y.\exposid{inner_};} \end{itemdescr} \indexlibrarymember{iter_swap}{join_view::iterator}% \begin{itemdecl} -friend constexpr void iter_swap(const iterator& x, const iterator& y) - noexcept(noexcept(ranges::iter_swap(x.inner_, y.inner_))); +friend constexpr void iter_swap(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + noexcept(noexcept(ranges::iter_swap(x.@\exposid{inner_}@, y.@\exposid{inner_}@))); \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return ranges::iter_swap(x.inner_, y.inner_);} +Equivalent to: \tcode{return ranges::iter_swap(x.\exposid{inner_}, y.\exposid{inner_});} \end{itemdescr} \rSec3[range.join.sentinel]{Class template \tcode{join_view::sentinel}} @@ -5127,56 +5127,56 @@ namespace std::ranges { template template - struct join_view::sentinel { + struct join_view::@\exposid{sentinel}@ { private: - using Parent = // \expos + using @\exposid{Parent}@ = // \expos conditional_t; - using Base = conditional_t; // \expos - sentinel_t end_ = sentinel_t(); // \expos + using @\exposid{Base}@ = conditional_t; // \expos + sentinel_t<@\exposid{Base}@> @\exposid{end_}@ = sentinel_t<@\exposid{Base}@>(); // \expos public: - sentinel() = default; + @\exposid{sentinel}@() = default; - constexpr explicit sentinel(Parent& parent); - constexpr sentinel(sentinel s) - requires Const && convertible_to, sentinel_t>; + constexpr explicit @\exposid{sentinel}@(@\exposid{Parent}@& parent); + constexpr @\exposid{sentinel}@(@\exposid{sentinel}@ s) + requires Const && convertible_to, sentinel_t<@\exposid{Base}@>>; - friend constexpr bool operator==(const iterator& x, const sentinel& y); + friend constexpr bool operator==(const @\exposid{iterator}@& x, const @\exposid{sentinel}@& y); }; } \end{codeblock} \indexlibraryctor{join_view::sentinel}% \begin{itemdecl} -constexpr explicit sentinel(Parent& parent); +constexpr explicit @\exposid{sentinel}@(@\exposid{Parent}@& parent); \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{end_} with \tcode{ranges::end(parent.base_)}. +Initializes \exposid{end_} with \tcode{ranges::end(\exposid{parent_}.\exposid{base_})}. \end{itemdescr} \indexlibraryctor{join_view::sentinel}% \begin{itemdecl} -constexpr sentinel(sentinel s) - requires Const && convertible_to, sentinel_t>; +constexpr @\exposid{sentinel}@(@\exposid{sentinel}@ s) + requires Const && convertible_to, sentinel_t<@\exposid{Base}@>>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{end_} with \tcode{std::move(s.end_)}. +Initializes \exposid{end_} with \tcode{std::move(s.\exposid{end_})}. \end{itemdescr} \indexlibrarymember{operator==}{join_view::sentinel}% \begin{itemdecl} -friend constexpr bool operator==(const iterator& x, const sentinel& y); +friend constexpr bool operator==(const @\exposid{iterator}@& x, const @\exposid{sentinel}@& y); \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.outer_ == y.end_;} +Equivalent to: \tcode{return x.\exposid{outer_} == y.\exposid{end_};} \end{itemdescr} \rSec3[range.join.adaptor]{\tcode{views::join}} @@ -5219,12 +5219,12 @@ \indexlibrarymember{end}{split_view}% \begin{codeblock} namespace std::ranges { - template struct @\placeholdernc{require-constant}@; // \expos + template struct @\exposid{require-constant}@; // \expos template concept @\defexposconcept{tiny-range}@ = // \expos sized_range && - requires { typename @\placeholdernc{require-constant}@::size()>; } && + requires { typename @\exposid{require-constant}@::size()>; } && (remove_reference_t::size() <= 1); template @@ -5233,13 +5233,13 @@ (forward_range || @\exposconcept{tiny-range}@) class split_view : public view_interface> { private: - V base_ = V(); // \expos - Pattern pattern_ = Pattern(); // \expos - iterator_t current_ = iterator_t(); // \expos, present only if \tcode{!forward_range} + V @\exposid{base_}@ = V(); // \expos + Pattern @\exposid{pattern_}@ = Pattern(); // \expos + iterator_t @\exposid{current_}@ = iterator_t(); // \expos, present only if \tcode{!forward_range} // \ref{range.split.outer}, class template \tcode{split_view::outer_iterator} - template struct outer_iterator; // \expos + template struct @\exposid{outer-iterator}@; // \expos // \ref{range.split.inner}, class template \tcode{split_view::inner_iterator} - template struct inner_iterator; // \expos + template struct @\exposid{inner-iterator}@; // \expos public: split_view() = default; constexpr split_view(V base, Pattern pattern); @@ -5254,29 +5254,29 @@ constructible_from>> constexpr split_view(R&& r, range_value_t e); - constexpr V base() const& requires copy_constructible { return base_; } - constexpr V base() && { return std::move(base_); } + constexpr V base() const& requires copy_constructible { return @\exposid{base_}@; } + constexpr V base() && { return std::move(@\exposid{base_}@); } constexpr auto begin() { if constexpr (forward_range) - return outer_iterator<@\placeholder{simple-view}@>{*this, ranges::begin(base_)}; + return @\exposid{outer-iterator}@<@\placeholder{simple-view}@>{*this, ranges::begin(@\exposid{base_}@)}; else { - current_ = ranges::begin(base_); - return outer_iterator{*this}; + @\exposid{current_}@ = ranges::begin(@\exposid{base_}@); + return @\exposid{outer-iterator}@{*this}; } } constexpr auto begin() const requires forward_range && forward_range { - return outer_iterator{*this, ranges::begin(base_)}; + return @\exposid{outer-iterator}@{*this, ranges::begin(@\exposid{base_}@)}; } constexpr auto end() requires forward_range && common_range { - return outer_iterator<@\placeholder{simple-view}@>{*this, ranges::end(base_)}; + return @\exposid{outer-iterator}@<@\placeholder{simple-view}@>{*this, ranges::end(@\exposid{base_}@)}; } constexpr auto end() const { if constexpr (forward_range && forward_range && common_range) - return outer_iterator{*this, ranges::end(base_)}; + return @\exposid{outer-iterator}@{*this, ranges::end(@\exposid{base_}@)}; else return default_sentinel; } @@ -5299,8 +5299,8 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{base_} with \tcode{std::move(base)}, and -\tcode{pattern_} with \tcode{std::move(pattern)}. +Initializes \exposid{base_} with \tcode{std::move(base)}, and +\exposid{pattern_} with \tcode{std::move(pattern)}. \end{itemdescr} \indexlibraryctor{split_view}% @@ -5314,8 +5314,8 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{base_} with \tcode{views::all(std::forward(r))}, and -\tcode{pattern_} with \tcode{views::all(\brk{}std::forward

(p))}. +Initializes \exposid{base_} with \tcode{views::all(std::forward(r))}, and +\exposid{pattern_} with \tcode{views::all(\brk{}std::forward

(p))}. \end{itemdescr} \indexlibraryctor{split_view}% @@ -5329,8 +5329,8 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{base_} with \tcode{views::all(std::forward(r))}, and -\tcode{pattern_} with \tcode{single_view\{\brk{}std::move(e)\}}. +Initializes \exposid{base_} with \tcode{views::all(std::forward(r))}, and +\exposid{pattern_} with \tcode{single_view\{\brk{}std::move(e)\}}. \end{itemdescr} \rSec3[range.split.outer]{Class template \tcode{split_view::outer_iterator}} @@ -5340,37 +5340,37 @@ namespace std::ranges { template template - struct split_view::outer_iterator { + struct split_view::@\exposid{outer-iterator}@ { private: - using Parent = // \expos + using @\exposid{Parent}@ = // \expos conditional_t; - using Base = // \expos + using @\exposid{Base}@ = // \expos conditional_t; - Parent* parent_ = nullptr; // \expos - iterator_t current_ = // \expos, present only if \tcode{V} models \libconcept{forward_range} - iterator_t(); + @\exposid{Parent}@* @\exposid{parent_}@ = nullptr; // \expos + iterator_t<@\exposid{Base}@> @\exposid{current_}@ = // \expos, present only if \tcode{V} models \libconcept{forward_range} + iterator_t<@\exposid{Base}@>(); public: using iterator_concept = - conditional_t, forward_iterator_tag, input_iterator_tag>; + conditional_t, forward_iterator_tag, input_iterator_tag>; using iterator_category = input_iterator_tag; // \ref{range.split.outer.value}, class \tcode{split_view::outer_iterator::value_type} struct value_type; - using difference_type = range_difference_t; - - outer_iterator() = default; - constexpr explicit outer_iterator(Parent& parent) - requires (!forward_range); - constexpr outer_iterator(Parent& parent, iterator_t current) - requires forward_range; - constexpr outer_iterator(outer_iterator i) + using difference_type = range_difference_t<@\exposid{Base}@>; + + @\exposid{outer-iterator}@() = default; + constexpr explicit @\exposid{outer-iterator}@(@\exposid{Parent}@& parent) + requires (!forward_range<@\exposid{Base}@>); + constexpr @\exposid{outer-iterator}@(@\exposid{Parent}@& parent, iterator_t<@\exposid{Base}@> current) + requires forward_range<@\exposid{Base}@>; + constexpr @\exposid{outer-iterator}@(@\exposid{outer-iterator}@ i) requires Const && convertible_to, iterator_t>; constexpr value_type operator*() const; - constexpr outer_iterator& operator++(); + constexpr @\exposid{outer-iterator}@& operator++(); constexpr decltype(auto) operator++(int) { - if constexpr (forward_range) { + if constexpr (forward_range<@\exposid{Base}@>) { auto tmp = *this; ++*this; return tmp; @@ -5378,56 +5378,56 @@ ++*this; } - friend constexpr bool operator==(const outer_iterator& x, const outer_iterator& y) - requires forward_range; + friend constexpr bool operator==(const @\exposid{outer-iterator}@& x, const @\exposid{outer-iterator}@& y) + requires forward_range<@\exposid{Base}@>; - friend constexpr bool operator==(const outer_iterator& x, default_sentinel_t); + friend constexpr bool operator==(const @\exposid{outer-iterator}@& x, default_sentinel_t); }; } \end{codeblock} \pnum Many of the following specifications refer to the notional member -\tcode{\placeholder{current}} of \tcode{outer_iterator}. -\tcode{\placeholder{current}} is equivalent to \tcode{current_} if \tcode{V} -models \libconcept{forward_range}, and \tcode{parent_->current_} otherwise. +\exposid{current_} of \tcode{outer_iterator}. +\exposid{current_} is equivalent to \exposid{current_} if \tcode{V} +models \libconcept{forward_range}, and \tcode{\exposid{parent_}->current_} otherwise. \indexlibraryctor{split_view::outer_iterator}% \begin{itemdecl} -constexpr explicit outer_iterator(Parent& parent) - requires (!forward_range); +constexpr explicit @\exposid{outer-iterator}@(@\exposid{Parent}@& parent) + requires (!forward_range<@\exposid{Base}@>); \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{parent_} with \tcode{addressof(parent)}. +Initializes \exposid{parent_} with \tcode{addressof(parent)}. \end{itemdescr} \indexlibraryctor{split_view::outer_iterator}% \begin{itemdecl} -constexpr outer_iterator(Parent& parent, iterator_t current) - requires forward_range; +constexpr @\exposid{outer-iterator}@(@\exposid{Parent}@& parent, iterator_t<@\exposid{Base}@> current) + requires forward_range<@\exposid{Base}@>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{parent_} with \tcode{addressof(parent)} -and \tcode{current_} with \tcode{std::move(current)}. +Initializes \exposid{parent_} with \tcode{addressof(parent)} +and \exposid{current_} with \tcode{std::move(current)}. \end{itemdescr} \indexlibraryctor{split_view::outer_iterator}% \begin{itemdecl} -constexpr outer_iterator(outer_iterator i) +constexpr @\exposid{outer-iterator}@(@\exposid{outer-iterator}@ i) requires Const && convertible_to, iterator_t>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{parent_} with \tcode{i.parent_} and -\tcode{current_} with \tcode{std::move(i.current_)}. +Initializes \exposid{parent_} with \tcode{i.\exposid{parent_}} and +\exposid{current_} with \tcode{std::move(i.\exposid{current_})}. \end{itemdescr} \indexlibrarymember{operator*}{split_view::outer_iterator}% @@ -5443,7 +5443,7 @@ \indexlibrarymember{operator++}{split_view::outer_iterator}% \begin{itemdecl} -constexpr outer_iterator& operator++(); +constexpr @\exposid{outer-iterator}@& operator++(); \end{itemdecl} \begin{itemdescr} @@ -5451,18 +5451,18 @@ \effects Equivalent to: \begin{codeblock} -const auto end = ranges::end(parent_->base_); -if (@\placeholder{current}@ == end) return *this; -const auto [pbegin, pend] = subrange{parent_->pattern_}; -if (pbegin == pend) ++@\placeholder{current}@; +const auto end = ranges::end(@\exposid{parent_}@->@\exposid{base_}@); +if (@\exposid{current_}@ == end) return *this; +const auto [pbegin, pend] = subrange{@\exposid{parent_}@->@\exposid{pattern_}@}; +if (pbegin == pend) ++@\exposid{current_}@; else { do { - auto [b, p] = ranges::mismatch(std::move(@\placeholder{current}@), end, pbegin, pend); - @\placeholder{current}@ = std::move(b); + auto [b, p] = ranges::mismatch(std::move(@\exposid{current_}@), end, pbegin, pend); + @\exposid{current_}@ = std::move(b); if (p == pend) { break; // The pattern matched; skip it } - } while (++@\placeholder{current}@ != end); + } while (++@\exposid{current_}@ != end); } return *this; \end{codeblock} @@ -5470,25 +5470,25 @@ \indexlibrarymember{operator==}{split_view::outer_iterator}% \begin{itemdecl} -friend constexpr bool operator==(const outer_iterator& x, const outer_iterator& y) - requires forward_range; +friend constexpr bool operator==(const @\exposid{outer-iterator}@& x, const @\exposid{outer-iterator}@& y) + requires forward_range<@\exposid{Base}@>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.current_ == y.current_;} +Equivalent to: \tcode{return x.\exposid{current_} == y.\exposid{current_};} \end{itemdescr} \indexlibrarymember{operator==}{split_view::outer_iterator}% \begin{itemdecl} -friend constexpr bool operator==(const outer_iterator& x, default_sentinel_t); +friend constexpr bool operator==(const @\exposid{outer-iterator}@& x, default_sentinel_t); \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.\placeholder{current} == ranges::end(x.parent_->base_);} +Equivalent to: \tcode{return x.\exposid{current_} == ranges::end(x.\exposid{parent_}->\exposid{base_});} \end{itemdescr} \rSec3[range.split.outer.value]{Class \tcode{split_view::outer_iterator::value_type}} @@ -5498,16 +5498,16 @@ namespace std::ranges { template template - struct split_view::outer_iterator::value_type + struct split_view::@\exposid{outer-iterator}@::value_type : view_interface { private: - outer_iterator i_ = outer_iterator(); // \expos + @\exposid{outer-iterator}@ @\exposid{i_}@ = @\exposid{outer-iterator}@(); // \expos public: value_type() = default; - constexpr explicit value_type(outer_iterator i); + constexpr explicit value_type(@\exposid{outer-iterator}@ i); - constexpr inner_iterator begin() const requires copyable; - constexpr inner_iterator begin() requires (!copyable); + constexpr @\exposid{inner-iterator}@ begin() const requires copyable<@\exposid{outer-iterator}@>; + constexpr @\exposid{inner-iterator}@ begin() requires (!copyable<@\exposid{outer-iterator}@>); constexpr default_sentinel_t end() const; }; } @@ -5515,18 +5515,18 @@ \indexlibraryctor{split_view::outer_iterator::value_type}% \begin{itemdecl} -constexpr explicit value_type(outer_iterator i); +constexpr explicit value_type(@\exposid{outer-iterator}@ i); \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{i_} with \tcode{std::move(i)}. +Initializes \exposid{i_} with \tcode{std::move(i)}. \end{itemdescr} \indexlibrarymember{begin}{split_view::outer_iterator::value_type}% \begin{itemdecl} -constexpr inner_iterator begin() const requires copyable; +constexpr @\exposid{inner-iterator}@ begin() const requires copyable<@\exposid{outer-iterator}@>; \end{itemdecl} \begin{itemdescr} @@ -5537,7 +5537,7 @@ \indexlibrarymember{begin}{split_view::outer_iterator::value_type}% \begin{itemdecl} -constexpr inner_iterator begin() requires (!copyable); +constexpr @\exposid{inner-iterator}@ begin() requires (!copyable<@\exposid{outer-iterator}@>); \end{itemdecl} \begin{itemdescr} @@ -5563,24 +5563,23 @@ namespace std::ranges { template template - struct split_view::inner_iterator { + struct split_view::@\exposid{inner-iterator}@ { private: - using Base = - conditional_t; // \expos - outer_iterator i_ = outer_iterator(); // \expos - bool incremented_ = false; // \expos + using @\exposid{Base}@ = conditional_t; // \expos + @\exposid{outer-iterator}@ @\exposid{i_}@ = @\exposid{outer-iterator}@(); // \expos + bool @\exposid{incremented_}@ = false; // \expos public: - using iterator_concept = typename outer_iterator::iterator_concept; + using iterator_concept = typename @\exposid{outer-iterator}@::iterator_concept; using iterator_category = @\seebelow@; - using value_type = range_value_t; - using difference_type = range_difference_t; + using value_type = range_value_t<@\exposid{Base}@>; + using difference_type = range_difference_t<@\exposid{Base}@>; - inner_iterator() = default; - constexpr explicit inner_iterator(outer_iterator i); + @\exposid{inner-iterator}@() = default; + constexpr explicit @\exposid{inner-iterator}@(@\exposid{outer-iterator}@ i); - constexpr decltype(auto) operator*() const { return *i_.@\placeholder{current}@; } + constexpr decltype(auto) operator*() const { return *@\exposid{i_}@.@\exposid{current_}@; } - constexpr inner_iterator& operator++(); + constexpr @\exposid{inner-iterator}@& operator++(); constexpr decltype(auto) operator++(int) { if constexpr (forward_range) { auto tmp = *this; @@ -5590,19 +5589,19 @@ ++*this; } - friend constexpr bool operator==(const inner_iterator& x, const inner_iterator& y) - requires forward_range; + friend constexpr bool operator==(const @\exposid{inner-iterator}@& x, const @\exposid{inner-iterator}@& y) + requires forward_range<@\exposid{Base}@>; - friend constexpr bool operator==(const inner_iterator& x, default_sentinel_t); + friend constexpr bool operator==(const @\exposid{inner-iterator}@& x, default_sentinel_t); - friend constexpr decltype(auto) iter_move(const inner_iterator& i) - noexcept(noexcept(ranges::iter_move(i.i_.@\placeholdernc{current}@))) { - return ranges::iter_move(i.i_.@\placeholdernc{current}@); + friend constexpr decltype(auto) iter_move(const @\exposid{inner-iterator}@& i) + noexcept(noexcept(ranges::iter_move(i.@\exposid{i_}@.@\placeholdernc{current}@))) { + return ranges::iter_move(i.@\exposid{i_}@.@\placeholdernc{current}@); } - friend constexpr void iter_swap(const inner_iterator& x, const inner_iterator& y) - noexcept(noexcept(ranges::iter_swap(x.i_.@\placeholdernc{current}, y.i_.\placeholdernc{current}@))) - requires indirectly_swappable>; + friend constexpr void iter_swap(const @\exposid{inner-iterator}@& x, const @\exposid{inner-iterator}@& y) + noexcept(noexcept(ranges::iter_swap(x.@\exposid{i_}@.@\placeholdernc{current}, y.@\exposid{i_}@.\placeholdernc{current}@))) + requires indirectly_swappable>; }; } \end{codeblock} @@ -5612,25 +5611,25 @@ \begin{itemize} \item \tcode{forward_iterator_tag} if -\tcode{iterator_traits>::iterator_category} models \linebreak +\tcode{iterator_traits>::iterator_category} models \linebreak \tcode{derived_from}; -\item otherwise, \tcode{iterator_traits>::iterator_category}. +\item otherwise, \tcode{iterator_traits>::iterator_category}. \end{itemize} \indexlibraryctor{split_view::inner_iterator}% \begin{itemdecl} -constexpr explicit inner_iterator(outer_iterator i); +constexpr explicit @\exposid{inner-iterator}@(@\exposid{outer-iterator}@ i); \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{i_} with \tcode{std::move(i)}. +Initializes \exposid{i_} with \tcode{std::move(i)}. \end{itemdescr} \indexlibrarymember{operator++}{split_view::inner_iterator}% \begin{itemdecl} -constexpr inner_iterator& operator++() const; +constexpr @\exposid{inner-iterator}@& operator++() const; \end{itemdecl} \begin{itemdescr} @@ -5638,32 +5637,32 @@ \effects Equivalent to: \begin{codeblock} -incremented_ = true; -if constexpr (!forward_range) { +@\exposid{incremented_}@ = true; +if constexpr (!forward_range<@\exposid{Base}@>) { if constexpr (Pattern::size() == 0) { return *this; } } -++i_.@\placeholder{current}@; +++@\exposid{i_}@.@\exposid{current_}@; return *this; \end{codeblock} \end{itemdescr} \indexlibrarymember{operator==}{split_view::inner_iterator}% \begin{itemdecl} -friend constexpr bool operator==(const inner_iterator& x, const inner_iterator& y) - requires forward_range; +friend constexpr bool operator==(const @\exposid{inner-iterator}@& x, const @\exposid{inner-iterator}@& y) + requires forward_range<@\exposid{Base}@>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.i_.current_ == y.i_.current_;} +Equivalent to: \tcode{return x.\exposid{i_}.\exposid{current_} == y.\exposid{i_}.\exposid{current_};} \end{itemdescr} \indexlibrarymember{operator==}{split_view::inner_iterator}% \begin{itemdecl} -friend constexpr bool operator==(const inner_iterator& x, default_sentinel_t); +friend constexpr bool operator==(const @\exposid{inner-iterator}@& x, default_sentinel_t); \end{itemdecl} \begin{itemdescr} @@ -5671,17 +5670,17 @@ \effects Equivalent to: \begin{codeblock} -auto [pcur, pend] = subrange{x.i_.parent_->pattern_}; -auto end = ranges::end(x.i_.parent_->base_); +auto [pcur, pend] = subrange{x.@\exposid{i_}@.@\exposid{parent_}@->@\exposid{pattern_}@}; +auto end = ranges::end(x.@\exposid{i_}@.@\exposid{parent_}@->@\exposid{base_}@); if constexpr (@\exposconcept{tiny-range}@) { - const auto & cur = x.i_.@\placeholder{current}@; + const auto & cur = x.@\exposid{i_}@.@\exposid{current_}@; if (cur == end) return true; - if (pcur == pend) return x.incremented_; + if (pcur == pend) return x.@\exposid{incremented_}@; return *cur == *pcur; } else { - auto cur = x.i_.@\placeholder{current}@; + auto cur = x.@\exposid{i_}@.@\exposid{current_}@; if (cur == end) return true; - if (pcur == pend) return x.incremented_; + if (pcur == pend) return x.@\exposid{incremented_}@; do { if (*cur != *pcur) return false; if (++pcur == pend) return true; @@ -5693,16 +5692,16 @@ \indexlibrarymember{iter_swap}{split_view::inner_iterator}% \begin{itemdecl} -friend constexpr void iter_swap(const inner_iterator& x, const inner_iterator& y) - noexcept(noexcept(ranges::iter_swap(x.i_.@\placeholdernc{current}, y.i_.\placeholdernc{current}@))) - requires indirectly_swappable>; +friend constexpr void iter_swap(const @\exposid{inner-iterator}@& x, const @\exposid{inner-iterator}@& y) + noexcept(noexcept(ranges::iter_swap(x.@\exposid{i_}@.@\exposid{current_}@, y.@\exposid{i_}@.@\exposid{current_}@))) + requires indirectly_swappable>; \end{itemdecl} \begin{itemdescr} \pnum \effects Equivalent to -\tcode{ranges::iter_swap(x.i_.\placeholdernc{current}, y.i_.\placeholdernc{current})}. +\tcode{ranges::iter_swap(x.\exposid{i_}.\exposid{current_}, y.\exposid{i_}.\exposid{current_})}. \end{itemdescr} \rSec3[range.split.adaptor]{\tcode{views::split}} @@ -5789,7 +5788,7 @@ requires (!common_range && copyable>) class common_view : public view_interface> { private: - V base_ = V(); // \expos + V @\exposid{base_}@ = V(); // \expos public: common_view() = default; @@ -5799,42 +5798,42 @@ requires (!common_range && constructible_from>) constexpr explicit common_view(R&& r); - constexpr V base() const& requires copy_constructible { return base_; } - constexpr V base() && { return std::move(base_); } + constexpr V base() const& requires copy_constructible { return @\exposid{base_}@; } + constexpr V base() && { return std::move(@\exposid{base_}@); } constexpr auto size() requires sized_range { - return ranges::size(base_); + return ranges::size(@\exposid{base_}@); } constexpr auto size() const requires sized_range { - return ranges::size(base_); + return ranges::size(@\exposid{base_}@); } constexpr auto begin() { if constexpr (random_access_range && sized_range) - return ranges::begin(base_); + return ranges::begin(@\exposid{base_}@); else - return common_iterator, sentinel_t>(ranges::begin(base_)); + return common_iterator, sentinel_t>(ranges::begin(@\exposid{base_}@)); } constexpr auto begin() const requires range { if constexpr (random_access_range && sized_range) - return ranges::begin(base_); + return ranges::begin(@\exposid{base_}@); else - return common_iterator, sentinel_t>(ranges::begin(base_)); + return common_iterator, sentinel_t>(ranges::begin(@\exposid{base_}@)); } constexpr auto end() { if constexpr (random_access_range && sized_range) - return ranges::begin(base_) + ranges::size(base_); + return ranges::begin(@\exposid{base_}@) + ranges::size(@\exposid{base_}@); else - return common_iterator, sentinel_t>(ranges::end(base_)); + return common_iterator, sentinel_t>(ranges::end(@\exposid{base_}@)); } constexpr auto end() const requires range { if constexpr (random_access_range && sized_range) - return ranges::begin(base_) + ranges::size(base_); + return ranges::begin(@\exposid{base_}@) + ranges::size(@\exposid{base_}@); else - return common_iterator, sentinel_t>(ranges::end(base_)); + return common_iterator, sentinel_t>(ranges::end(@\exposid{base_}@)); } }; @@ -5851,7 +5850,7 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{base_} with \tcode{std::move(base)}. +Initializes \exposid{base_} with \tcode{std::move(base)}. \end{itemdescr} \indexlibraryctor{common_view}% @@ -5864,7 +5863,7 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{base_} with \tcode{views::all(std::forward(r))}. +Initializes \exposid{base_} with \tcode{views::all(std::forward(r))}. \end{itemdescr} \rSec3[range.common.adaptor]{\tcode{views::common}} @@ -5911,7 +5910,7 @@ requires bidirectional_range class reverse_view : public view_interface> { private: - V base_ = V(); // \expos + V @\exposid{base_}@ = V(); // \expos public: reverse_view() = default; @@ -5921,8 +5920,8 @@ requires bidirectional_range && constructible_from> constexpr explicit reverse_view(R&& r); - constexpr V base() const& requires copy_constructible { return base_; } - constexpr V base() && { return std::move(base_); } + constexpr V base() const& requires copy_constructible { return @\exposid{base_}@; } + constexpr V base() && { return std::move(@\exposid{base_}@); } constexpr reverse_iterator> begin(); constexpr reverse_iterator> begin() requires common_range; @@ -5934,10 +5933,10 @@ requires common_range; constexpr auto size() requires sized_range { - return ranges::size(base_); + return ranges::size(@\exposid{base_}@); } constexpr auto size() const requires sized_range { - return ranges::size(base_); + return ranges::size(@\exposid{base_}@); } }; @@ -5954,7 +5953,7 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{base_} with \tcode{std::move(base)}. +Initializes \exposid{base_} with \tcode{std::move(base)}. \end{itemdescr} \indexlibraryctor{reverse_view}% @@ -5967,7 +5966,7 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{base_} with \tcode{views::all(std::forward(r))}. +Initializes \exposid{base_} with \tcode{views::all(std::forward(r))}. \end{itemdescr} \indexlibrarymember{begin}{reverse_view}% @@ -5979,7 +5978,7 @@ \pnum \returns \begin{codeblock} -make_reverse_iterator(ranges::next(ranges::begin(base_), ranges::end(base_))) +make_reverse_iterator(ranges::next(ranges::begin(@\exposid{base_}@), ranges::end(@\exposid{base_}@))) \end{codeblock} \pnum @@ -6109,7 +6108,7 @@ \begin{example} \begin{codeblock} auto is_even = [](const auto x) { return x % 2 == 0; }; -cout << ranges::count_if(values_view{historical_figures}, is_even); // prints \tcode{2} +cout << ranges::@\exposid{count_}@if(values_view{historical_figures}, is_even); // prints \tcode{2} \end{codeblock} \end{example} @@ -6140,30 +6139,30 @@ elements_view() = default; constexpr explicit elements_view(V base); - constexpr V base() const& requires copy_constructible { return base_; } - constexpr V base() && { return std::move(base_); } + constexpr V base() const& requires copy_constructible { return @\exposid{base_}@; } + constexpr V base() && { return std::move(@\exposid{base_}@); } constexpr auto begin() requires (!@\placeholder{simple-view}@) - { return iterator(ranges::begin(base_)); } + { return @\exposid{iterator}@(ranges::begin(@\exposid{base_}@)); } constexpr auto begin() const requires @\placeholder{simple-view}@ - { return iterator(ranges::begin(base_)); } + { return @\exposid{iterator}@(ranges::begin(@\exposid{base_}@)); } constexpr auto end() requires (!@\placeholder{simple-view}@) - { return ranges::end(base_); } + { return ranges::end(@\exposid{base_}@); } constexpr auto end() const requires @\placeholder{simple-view}@ - { return ranges::end(base_); } + { return ranges::end(@\exposid{base_}@); } constexpr auto size() requires sized_range - { return ranges::size(base_); } + { return ranges::size(@\exposid{base_}@); } constexpr auto size() const requires sized_range - { return ranges::size(base_); } + { return ranges::size(@\exposid{base_}@); } private: - template struct iterator; // \expos - V base_ = V(); // \expos + template struct @\exposid{iterator}@; // \expos + V @\exposid{base_}@ = V(); // \expos }; } \end{codeblock} @@ -6176,7 +6175,7 @@ \begin{itemdescr} \pnum \effects -Initializes \tcode{base_} with \tcode{std::move(base)}. +Initializes \exposid{base_} with \tcode{std::move(base)}. \end{itemdescr} \rSec3[range.elements.iterator]{Class template \tcode{elements_view::iterator}} @@ -6186,117 +6185,117 @@ namespace std::ranges { template template - class elements_view::iterator { // \expos - using base_t = conditional_t; - friend iterator; + class elements_view::@\exposid{iterator}@ { // \expos + using @\exposid{base-t}@ = conditional_t; + friend @\exposid{iterator}@; - iterator_t current_; + iterator_t<@\exposid{base-t}@> @\exposid{current_}@; public: - using iterator_category = typename iterator_traits>::iterator_category; - using value_type = remove_cvref_t>>; - using difference_type = range_difference_t; + using iterator_category = typename iterator_traits>::iterator_category; + using value_type = remove_cvref_t>>; + using difference_type = range_difference_t<@\exposid{base-t}@>; - iterator() = default; - constexpr explicit iterator(iterator_t current); - constexpr iterator(iterator i) - requires Const && convertible_to, iterator_t>; + @\exposid{iterator}@() = default; + constexpr explicit @\exposid{iterator}@(iterator_t<@\exposid{base-t}@> current); + constexpr @\exposid{iterator}@(iterator i) + requires Const && convertible_to, iterator_t<@\exposid{base-t}@>>; - constexpr iterator_t base() const & - requires copyable>; - constexpr iterator_t base() &&; + constexpr iterator_t<@\exposid{base-t}@> base() const & + requires copyable>; + constexpr iterator_t<@\exposid{base-t}@> base() &&; constexpr decltype(auto) operator*() const - { return get(*current_); } + { return get(*@\exposid{current_}@); } - constexpr iterator& operator++(); - constexpr void operator++(int) requires (!forward_range); - constexpr iterator operator++(int) requires forward_range; + constexpr @\exposid{iterator}@& operator++(); + constexpr void operator++(int) requires (!forward_range<@\exposid{base-t}@>); + constexpr @\exposid{iterator}@ operator++(int) requires forward_range<@\exposid{base-t}@>; - constexpr iterator& operator--() requires bidirectional_range; - constexpr iterator operator--(int) requires bidirectional_range; + constexpr @\exposid{iterator}@& operator--() requires bidirectional_range<@\exposid{base-t}@>; + constexpr @\exposid{iterator}@ operator--(int) requires bidirectional_range<@\exposid{base-t}@>; - constexpr iterator& operator+=(difference_type x) - requires random_access_range; - constexpr iterator& operator-=(difference_type x) - requires random_access_range; + constexpr @\exposid{iterator}@& operator+=(difference_type x) + requires random_access_range<@\exposid{base-t}@>; + constexpr @\exposid{iterator}@& operator-=(difference_type x) + requires random_access_range<@\exposid{base-t}@>; constexpr decltype(auto) operator[](difference_type n) const - requires random_access_range - { return get(*(current_ + n)); } - - friend constexpr bool operator==(const iterator& x, const iterator& y) - requires equality_comparable>; - friend constexpr bool operator==(const iterator& x, const sentinel_t& y); - - friend constexpr bool operator<(const iterator& x, const iterator& y) - requires random_access_range; - friend constexpr bool operator>(const iterator& x, const iterator& y) - requires random_access_range; - friend constexpr bool operator<=(const iterator& y, const iterator& y) - requires random_access_range; - friend constexpr bool operator>=(const iterator& x, const iterator& y) - requires random_access_range; - friend constexpr compare_three_way_result_t> - operator<=>(const iterator& x, const iterator& y) - requires random_access_range && three_way_comparable>; - - friend constexpr iterator operator+(const iterator& x, difference_type y) - requires random_access_range; - friend constexpr iterator operator+(difference_type x, const iterator& y) - requires random_access_range; - friend constexpr iterator operator-(const iterator& x, difference_type y) - requires random_access_range; - friend constexpr difference_type operator-(const iterator& x, const iterator& y) - requires random_access_range; + requires random_access_range<@\exposid{base-t}@> + { return get(*(@\exposid{current_}@ + n)); } + + friend constexpr bool operator==(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires equality_comparable>; + friend constexpr bool operator==(const @\exposid{iterator}@& x, const sentinel_t<@\exposid{base-t}@>& y); + + friend constexpr bool operator<(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{base-t}@>; + friend constexpr bool operator>(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{base-t}@>; + friend constexpr bool operator<=(const @\exposid{iterator}@& y, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{base-t}@>; + friend constexpr bool operator>=(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{base-t}@>; + friend constexpr compare_three_way_result_t> + operator<=>(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{base-t}@> && three_way_comparable>; + + friend constexpr @\exposid{iterator}@ operator+(const @\exposid{iterator}@& x, difference_type y) + requires random_access_range<@\exposid{base-t}@>; + friend constexpr @\exposid{iterator}@ operator+(difference_type x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{base-t}@>; + friend constexpr @\exposid{iterator}@ operator-(const @\exposid{iterator}@& x, difference_type y) + requires random_access_range<@\exposid{base-t}@>; + friend constexpr difference_type operator-(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{base-t}@>; friend constexpr difference_type - operator-(const iterator& x, const sentinel_t& y) - requires sized_sentinel_for, iterator_t>; + operator-(const @\exposid{iterator}@& x, const sentinel_t<@\exposid{base-t}@>& y) + requires sized_sentinel_for, iterator_t<@\exposid{base-t}@>>; friend constexpr difference_type - operator-(const sentinel_t& x, const iterator& y) - requires sized_sentinel_for, iterator_t>; + operator-(const sentinel_t<@\exposid{base-t}@>& x, const @\exposid{iterator}@& y) + requires sized_sentinel_for, iterator_t<@\exposid{base-t}@>>; }; } \end{codeblock} \indexlibraryctor{elements_view::iterator}% \begin{itemdecl} -constexpr explicit iterator(iterator_t current); +constexpr explicit @\exposid{iterator}@(iterator_t<@\exposid{base-t}@> current); \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{current_} with \tcode{std::move(current)}. +Initializes \exposid{current_} with \tcode{std::move(current)}. \end{itemdescr} \indexlibraryctor{elements_view::iterator}% \begin{itemdecl} -constexpr iterator(iterator i) - requires Const && convertible_to, iterator_t>; +constexpr @\exposid{iterator}@(@\exposid{iterator}@ i) + requires Const && convertible_to, iterator_t<@\exposid{base-t}@>>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Initializes \tcode{current_} with \tcode{std::move(i.current_)}. +Initializes \exposid{current_} with \tcode{std::move(i.\exposid{current_})}. \end{itemdescr} \indexlibrarymember{base}{elements_view::iterator}% \begin{itemdecl} -constexpr iterator_t base() const & - requires copyable>; +constexpr iterator_t<@\exposid{base-t}@> base() const & + requires copyable>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return current_;} +Equivalent to: \tcode{return \exposid{current_};} \end{itemdescr} \indexlibrarymember{base}{elements_view::iterator}% \begin{itemdecl} -constexpr iterator_t base() &&; +constexpr iterator_t<@\exposid{base-t}@> base() &&; \end{itemdecl} \begin{itemdescr} @@ -6307,7 +6306,7 @@ \indexlibrarymember{operator++}{elements_view::iterator}% \begin{itemdecl} -constexpr iterator& operator++(); +constexpr @\exposid{iterator}@& operator++(); \end{itemdecl} \begin{itemdescr} @@ -6315,14 +6314,14 @@ \effects Equivalent to: \begin{codeblock} -++current_; +++@\exposid{current_}@; return *this; \end{codeblock} \end{itemdescr} \indexlibrarymember{operator++}{elements_view::iterator}% \begin{itemdecl} -constexpr void operator++(int) requires (!forward_range); +constexpr void operator++(int) requires (!forward_range<@\exposid{base-t}@>); \end{itemdecl} \begin{itemdescr} @@ -6333,7 +6332,7 @@ \indexlibrarymember{operator++}{elements_view::iterator}% \begin{itemdecl} -constexpr iterator operator++(int) requires forward_range; +constexpr @\exposid{iterator}@ operator++(int) requires forward_range<@\exposid{base-t}@>; \end{itemdecl} \begin{itemdescr} @@ -6342,14 +6341,14 @@ Equivalent to: \begin{codeblock} auto temp = *this; -++current_; +++@\exposid{current_}@; return temp; \end{codeblock} \end{itemdescr} \indexlibrarymember{operator--}{elements_view::iterator}% \begin{itemdecl} -constexpr iterator& operator--() requires bidirectional_range; +constexpr @\exposid{iterator}@& operator--() requires bidirectional_range<@\exposid{base-t}@>; \end{itemdecl} \begin{itemdescr} @@ -6357,14 +6356,14 @@ \effects Equivalent to: \begin{codeblock} ---current_; +--@\exposid{current_}@; return *this; \end{codeblock} \end{itemdescr} \indexlibrarymember{operator--}{elements_view::iterator}% \begin{itemdecl} -constexpr iterator operator--(int) requires bidirectional_range; +constexpr @\exposid{iterator}@ operator--(int) requires bidirectional_range<@\exposid{base-t}@>; \end{itemdecl} \begin{itemdescr} @@ -6373,15 +6372,15 @@ Equivalent to: \begin{codeblock} auto temp = *this; ---current_; +--@\exposid{current_}@; return temp; \end{codeblock} \end{itemdescr} \indexlibrarymember{operator+=}{elements_view::iterator}% \begin{itemdecl} -constexpr iterator& operator+=(difference_type n); - requires random_access_range; +constexpr @\exposid{iterator}@& operator+=(difference_type n); + requires random_access_range<@\exposid{base-t}@>; \end{itemdecl} \begin{itemdescr} @@ -6389,15 +6388,15 @@ \effects Equivalent to: \begin{codeblock} -current_ += n; +@\exposid{current_}@ += n; return *this; \end{codeblock} \end{itemdescr} \indexlibrarymember{operator-=}{elements_view::iterator}% \begin{itemdecl} -constexpr iterator& operator-=(difference_type n) - requires random_access_range; +constexpr @\exposid{iterator}@& operator-=(difference_type n) + requires random_access_range<@\exposid{base-t}@>; \end{itemdecl} \begin{itemdescr} @@ -6405,50 +6404,50 @@ \effects Equivalent to: \begin{codeblock} -current_ -= n; +@\exposid{current_}@ -= n; return *this; \end{codeblock} \end{itemdescr} \indexlibrarymember{operator==}{elements_view::iterator}% \begin{itemdecl} -friend constexpr bool operator==(const iterator& x, const iterator& y) - requires equality_comparable; +friend constexpr bool operator==(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires equality_comparable<@\exposid{base-t}@>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.current_ == y.current_;} +Equivalent to: \tcode{return x.\exposid{current_} == y.\exposid{current_};} \end{itemdescr} \indexlibrarymember{operator==}{elements_view::iterator}% \begin{itemdecl} -friend constexpr bool operator==(const iterator& x, const sentinel_t& y); +friend constexpr bool operator==(const @\exposid{iterator}@& x, const sentinel_t<@\exposid{base-t}@>& y); \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.current_ == y;} +Equivalent to: \tcode{return x.\exposid{current_} == y;} \end{itemdescr} \indexlibrarymember{operator<}{elements_view::iterator}% \begin{itemdecl} -friend constexpr bool operator<(const iterator& x, const iterator& y) - requires random_access_range; +friend constexpr bool operator<(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{base-t}@>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.current_ < y.current_;} +Equivalent to: \tcode{return x.\exposid{current_} < y.\exposid{current_};} \end{itemdescr} \indexlibrarymember{operator>}{elements_view::iterator}% \begin{itemdecl} -friend constexpr bool operator>(const iterator& x, const iterator& y) - requires random_access_range; +friend constexpr bool operator>(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{base-t}@>; \end{itemdecl} \begin{itemdescr} @@ -6459,8 +6458,8 @@ \indexlibrarymember{operator<=}{elements_view::iterator}% \begin{itemdecl} -friend constexpr bool operator<=(const iterator& x, const iterator& y) - requires random_access_range; +friend constexpr bool operator<=(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{base-t}@>; \end{itemdecl} \begin{itemdescr} @@ -6471,8 +6470,8 @@ \indexlibrarymember{operator>=}{elements_view::iterator}% \begin{itemdecl} -friend constexpr bool operator>=(const iterator& x, const iterator& y) - requires random_access_range; +friend constexpr bool operator>=(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{base-t}@>; \end{itemdecl} \begin{itemdescr} @@ -6483,21 +6482,21 @@ \indexlibrarymember{operator<=>}{elements_view::iterator}% \begin{itemdecl} -friend constexpr compare_three_way_result_t> - operator<=>(const iterator& x, const iterator& y) - requires random_access_range && three_way_comparable>; +friend constexpr compare_three_way_result_t> + operator<=>(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{base-t}@> && three_way_comparable>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.current_ <=> y.current_;} +Equivalent to: \tcode{return x.\exposid{current_} <=> y.\exposid{current_};} \end{itemdescr} \indexlibrarymember{operator+}{elements_view::iterator}% \begin{itemdecl} -friend constexpr iterator operator+(const iterator& x, difference_type y) - requires random_access_range; +friend constexpr @\exposid{iterator}@ operator+(const @\exposid{iterator}@& x, difference_type y) + requires random_access_range<@\exposid{base-t}@>; \end{itemdecl} \begin{itemdescr} @@ -6508,8 +6507,8 @@ \indexlibrarymember{operator+}{elements_view::iterator}% \begin{itemdecl} -friend constexpr iterator operator+(difference_type x, const iterator& y) - requires random_access_range; +friend constexpr @\exposid{iterator}@ operator+(difference_type x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{base-t}@>; \end{itemdecl} \begin{itemdescr} @@ -6520,8 +6519,8 @@ \indexlibrarymember{operator-}{elements_view::iterator}% \begin{itemdecl} -constexpr iterator operator-(const iterator& x, difference_type y) - requires random_access_range; +constexpr @\exposid{iterator}@ operator-(const @\exposid{iterator}@& x, difference_type y) + requires random_access_range<@\exposid{base-t}@>; \end{itemdecl} \begin{itemdescr} @@ -6532,34 +6531,34 @@ \indexlibrarymember{operator-}{elements_view::iterator}% \begin{itemdecl} -constexpr difference_type operator-(const iterator& x, const iterator& y) - requires random_access_range; +constexpr difference_type operator-(const @\exposid{iterator}@& x, const @\exposid{iterator}@& y) + requires random_access_range<@\exposid{base-t}@>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.current_ - y.current_;} +Equivalent to: \tcode{return x.\exposid{current_} - y.\exposid{current_};} \end{itemdescr} \indexlibrarymember{operator-}{elements_view::iterator}% \begin{itemdecl} friend constexpr difference_type - operator-(const iterator& x, const sentinel_t& y) - requires sized_sentinel_for, iterator_t>; + operator-(const @\exposid{iterator}@& x, const sentinel_t<@\exposid{base-t}@>& y) + requires sized_sentinel_for, iterator_t<@\exposid{base-t}@>>; \end{itemdecl} \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.current_ - y;} +Equivalent to: \tcode{return x.\exposid{current_} - y;} \end{itemdescr} \indexlibrarymember{operator-}{elements_view::iterator}% \begin{itemdecl} friend constexpr difference_type - operator-(const sentinel_t& x, const iterator& y) - requires sized_sentinel_for, iterator_t>; + operator-(const sentinel_t<@\exposid{base-t}@>& x, const @\exposid{iterator}@& y) + requires sized_sentinel_for, iterator_t<@\exposid{base-t}@>>; \end{itemdecl} \begin{itemdescr}