|
206 | 206 | namespace views { inline constexpr @\unspec@ take = @\unspec@; } |
207 | 207 |
|
208 | 208 | // \ref{range.take.while}, take while view |
209 | | - template<view R, class Pred> |
210 | | - requires input_range<R> && is_object_v<Pred> && |
211 | | - indirect_unary_predicate<const Pred, iterator_t<R>> |
| 209 | + template<view V, class Pred> |
| 210 | + requires input_range<V> && is_object_v<Pred> && |
| 211 | + indirect_unary_predicate<const Pred, iterator_t<V>> |
212 | 212 | class take_while_view; |
213 | 213 |
|
214 | 214 | namespace views { inline constexpr @\unspec@ take_while = @\unspec@; } |
215 | 215 |
|
216 | 216 | // \ref{range.drop}, drop view |
217 | | - template<view R> |
| 217 | + template<view V> |
218 | 218 | class drop_view; |
219 | 219 |
|
220 | 220 | namespace views { inline constexpr @\unspec@ drop = @\unspec@; } |
221 | 221 |
|
222 | 222 | // \ref{range.drop.while}, drop while view |
223 | | - template<view R, class Pred> |
224 | | - requires input_range<R> && is_object_v<Pred> && |
225 | | - indirect_unary_predicate<const Pred, iterator_t<R>> |
| 223 | + template<view V, class Pred> |
| 224 | + requires input_range<V> && is_object_v<Pred> && |
| 225 | + indirect_unary_predicate<const Pred, iterator_t<V>> |
226 | 226 | class drop_while_view; |
227 | 227 |
|
228 | 228 | namespace views { inline constexpr @\unspec@ drop_while = @\unspec@; } |
|
266 | 266 | namespace views { inline constexpr @\unspec@ reverse = @\unspec@; } |
267 | 267 |
|
268 | 268 | // \ref{range.elements}, elements view |
269 | | - template<input_range R, size_t N> |
| 269 | + template<input_range V, size_t N> |
270 | 270 | requires @\seebelow@; |
271 | 271 | class elements_view; |
272 | 272 |
|
|
4329 | 4329 | \indexlibrarymember{end}{take_while_view}% |
4330 | 4330 | \begin{codeblock} |
4331 | 4331 | namespace std::ranges { |
4332 | | - template<view R, class Pred> |
4333 | | - requires input_range<R> && is_object_v<Pred> && |
4334 | | - indirect_unary_predicate<const Pred, iterator_t<R>> |
4335 | | - class take_while_view : public view_interface<take_while_view<R, Pred>> { |
| 4332 | + template<view V, class Pred> |
| 4333 | + requires input_range<V> && is_object_v<Pred> && |
| 4334 | + indirect_unary_predicate<const Pred, iterator_t<V>> |
| 4335 | + class take_while_view : public view_interface<take_while_view<V, Pred>> { |
4336 | 4336 | template<bool> class sentinel; // \expos |
4337 | 4337 |
|
4338 | | - R base_; // \expos |
| 4338 | + V base_; // \expos |
4339 | 4339 | @\placeholder{semiregular-box}@<Pred> pred_; @\itcorr[-1]@ // \expos |
4340 | 4340 |
|
4341 | 4341 | public: |
4342 | 4342 | take_while_view() = default; |
4343 | | - constexpr take_while_view(R base, Pred pred); |
| 4343 | + constexpr take_while_view(V base, Pred pred); |
4344 | 4344 |
|
4345 | | - constexpr R base() const& requires copy_constructible<R> { return base_; } |
4346 | | - constexpr R base() && { return std::move(base_); } |
| 4345 | + constexpr V base() const& requires copy_constructible<V> { return base_; } |
| 4346 | + constexpr V base() && { return std::move(base_); } |
4347 | 4347 |
|
4348 | 4348 | constexpr const Pred& pred() const; |
4349 | 4349 |
|
4350 | | - constexpr auto begin() requires (!@\placeholder{simple-view}@<R>) |
| 4350 | + constexpr auto begin() requires (!@\placeholder{simple-view}@<V>) |
4351 | 4351 | { return ranges::begin(base_); } |
4352 | 4352 |
|
4353 | | - constexpr auto begin() const requires range<const R> |
| 4353 | + constexpr auto begin() const requires range<const V> |
4354 | 4354 | { return ranges::begin(base_); } |
4355 | 4355 |
|
4356 | | - constexpr auto end() requires (!@\placeholder{simple-view}@<R>) |
| 4356 | + constexpr auto end() requires (!@\placeholder{simple-view}@<V>) |
4357 | 4357 | { return sentinel<false>(ranges::end(base_), addressof(*pred_)); } |
4358 | 4358 |
|
4359 | | - constexpr auto end() const requires range<const R> |
| 4359 | + constexpr auto end() const requires range<const V> |
4360 | 4360 | { return sentinel<true>(ranges::end(base_), addressof(*pred_)); } |
4361 | 4361 | }; |
4362 | 4362 |
|
|
4367 | 4367 |
|
4368 | 4368 | \indexlibraryctor{take_while_view}% |
4369 | 4369 | \begin{itemdecl} |
4370 | | -constexpr take_while_view(R base, Pred pred); |
| 4370 | +constexpr take_while_view(V base, Pred pred); |
4371 | 4371 | \end{itemdecl} |
4372 | 4372 |
|
4373 | 4373 | \begin{itemdescr} |
|
4427 | 4427 | \indexlibraryctor{take_while_view::sentinel}% |
4428 | 4428 | \begin{itemdecl} |
4429 | 4429 | constexpr sentinel(sentinel<!Const> s) |
4430 | | - requires Const && convertible_to<sentinel_t<R>, sentinel_t<base_t>>; |
| 4430 | + requires Const && convertible_to<sentinel_t<V>, sentinel_t<base_t>>; |
4431 | 4431 | \end{itemdecl} |
4432 | 4432 |
|
4433 | 4433 | \begin{itemdescr} |
|
4487 | 4487 | \indexlibrarymember{size}{drop_view}% |
4488 | 4488 | \begin{codeblock} |
4489 | 4489 | namespace std::ranges { |
4490 | | - template<view R> |
4491 | | - class drop_view : public view_interface<drop_view<R>> { |
| 4490 | + template<view V> |
| 4491 | + class drop_view : public view_interface<drop_view<V>> { |
4492 | 4492 | public: |
4493 | 4493 | drop_view() = default; |
4494 | | - constexpr drop_view(R base, range_difference_t<R> count); |
| 4494 | + constexpr drop_view(V base, range_difference_t<V> count); |
4495 | 4495 |
|
4496 | | - constexpr R base() const& requires copy_constructible<R> { return base_; } |
4497 | | - constexpr R base() && { return std::move(base_); } |
| 4496 | + constexpr V base() const& requires copy_constructible<V> { return base_; } |
| 4497 | + constexpr V base() && { return std::move(base_); } |
4498 | 4498 |
|
4499 | 4499 | constexpr auto begin() |
4500 | | - requires (!(@\placeholder{simple-view}@<R> && random_access_range<R>)); |
| 4500 | + requires (!(@\placeholder{simple-view}@<V> && random_access_range<V>)); |
4501 | 4501 | constexpr auto begin() const |
4502 | | - requires random_access_range<const R>; |
| 4502 | + requires random_access_range<const V>; |
4503 | 4503 |
|
4504 | 4504 | constexpr auto end() |
4505 | | - requires (!@\placeholder{simple-view}@<R>) |
| 4505 | + requires (!@\placeholder{simple-view}@<V>) |
4506 | 4506 | { return ranges::end(base_); } |
4507 | 4507 |
|
4508 | 4508 | constexpr auto end() const |
4509 | | - requires range<const R> |
| 4509 | + requires range<const V> |
4510 | 4510 | { return ranges::end(base_); } |
4511 | 4511 |
|
4512 | 4512 | constexpr auto size() |
4513 | | - requires sized_range<R> |
| 4513 | + requires sized_range<V> |
4514 | 4514 | { |
4515 | 4515 | const auto s = ranges::size(base_); |
4516 | 4516 | const auto c = static_cast<decltype(s)>(count_); |
4517 | 4517 | return s < c ? 0 : s - c; |
4518 | 4518 | } |
4519 | 4519 |
|
4520 | 4520 | constexpr auto size() const |
4521 | | - requires sized_range<const R> |
| 4521 | + requires sized_range<const V> |
4522 | 4522 | { |
4523 | 4523 | const auto s = ranges::size(base_); |
4524 | 4524 | const auto c = static_cast<decltype(s)>(count_); |
4525 | 4525 | return s < c ? 0 : s - c; |
4526 | 4526 | } |
4527 | 4527 | private: |
4528 | | - R base_; // \expos |
4529 | | - range_difference_t<R> count_; // \expos |
| 4528 | + V base_; // \expos |
| 4529 | + range_difference_t<V> count_; // \expos |
4530 | 4530 | }; |
4531 | 4531 |
|
4532 | 4532 | template<class R> |
|
4536 | 4536 |
|
4537 | 4537 | \indexlibraryctor{drop_view}% |
4538 | 4538 | \begin{itemdecl} |
4539 | | -constexpr drop_view(R base, range_difference_t<R> count); |
| 4539 | +constexpr drop_view(V base, range_difference_t<V> count); |
4540 | 4540 | \end{itemdecl} |
4541 | 4541 |
|
4542 | 4542 | \begin{itemdescr} |
|
4553 | 4553 | \indexlibrarymember{begin}{drop_view}% |
4554 | 4554 | \begin{itemdecl} |
4555 | 4555 | constexpr auto begin() |
4556 | | - requires (!(@\placeholder{simple-view}@<R> && random_access_range<R>)); |
| 4556 | + requires (!(@\placeholder{simple-view}@<V> && random_access_range<V>)); |
4557 | 4557 | constexpr auto begin() const |
4558 | | - requires random_access_range<const R>; |
| 4558 | + requires random_access_range<const V>; |
4559 | 4559 | \end{itemdecl} |
4560 | 4560 |
|
4561 | 4561 | \begin{itemdescr} |
|
4614 | 4614 | \indexlibrarymember{end}{drop_while_view}% |
4615 | 4615 | \begin{codeblock} |
4616 | 4616 | namespace std::ranges { |
4617 | | - template<view R, class Pred> |
4618 | | - requires input_range<R> && is_object_v<Pred> && |
4619 | | - indirect_unary_predicate<const Pred, iterator_t<R>> |
4620 | | - class drop_while_view : public view_interface<drop_while_view<R, Pred>> { |
| 4617 | + template<view V, class Pred> |
| 4618 | + requires input_range<V> && is_object_v<Pred> && |
| 4619 | + indirect_unary_predicate<const Pred, iterator_t<V>> |
| 4620 | + class drop_while_view : public view_interface<drop_while_view<V, Pred>> { |
4621 | 4621 | public: |
4622 | 4622 | drop_while_view() = default; |
4623 | | - constexpr drop_while_view(R base, Pred pred); |
| 4623 | + constexpr drop_while_view(V base, Pred pred); |
4624 | 4624 |
|
4625 | | - constexpr R base() const& requires copy_constructible<R> { return base_; } |
4626 | | - constexpr R base() && { return std::move(base_); } |
| 4625 | + constexpr V base() const& requires copy_constructible<V> { return base_; } |
| 4626 | + constexpr V base() && { return std::move(base_); } |
4627 | 4627 |
|
4628 | 4628 | constexpr const Pred& pred() const; |
4629 | 4629 |
|
|
4633 | 4633 | { return ranges::end(base_); } |
4634 | 4634 |
|
4635 | 4635 | private: |
4636 | | - R base_; // \expos |
| 4636 | + V base_; // \expos |
4637 | 4637 | @\placeholder{semiregular-box}@<Pred> pred_; @\itcorr[-1]@ // \expos |
4638 | 4638 | }; |
4639 | 4639 |
|
|
4644 | 4644 |
|
4645 | 4645 | \indexlibraryctor{drop_while_view}% |
4646 | 4646 | \begin{itemdecl} |
4647 | | -constexpr drop_while_view(R base, Pred pred); |
| 4647 | +constexpr drop_while_view(V base, Pred pred); |
4648 | 4648 | \end{itemdecl} |
4649 | 4649 |
|
4650 | 4650 | \begin{itemdescr} |
|
6132 | 6132 | }; |
6133 | 6133 |
|
6134 | 6134 |
|
6135 | | - template<input_range R, size_t N> |
6136 | | - requires view<R> && @\placeholder{has-tuple-element}@<range_value_t<R>, N> && |
6137 | | - @\placeholder{has-tuple-element}@<remove_reference_t<range_reference_t<R>>, N> |
6138 | | - class elements_view : public view_interface<elements_view<R, N>> { |
| 6135 | + template<input_range V, size_t N> |
| 6136 | + requires view<V> && @\placeholder{has-tuple-element}@<range_value_t<V>, N> && |
| 6137 | + @\placeholder{has-tuple-element}@<remove_reference_t<range_reference_t<V>>, N> |
| 6138 | + class elements_view : public view_interface<elements_view<V, N>> { |
6139 | 6139 | public: |
6140 | 6140 | elements_view() = default; |
6141 | | - constexpr explicit elements_view(R base); |
| 6141 | + constexpr explicit elements_view(V base); |
6142 | 6142 |
|
6143 | | - constexpr R base() const& requires copy_constructible<R> { return base_; } |
6144 | | - constexpr R base() && { return std::move(base_); } |
| 6143 | + constexpr V base() const& requires copy_constructible<V> { return base_; } |
| 6144 | + constexpr V base() && { return std::move(base_); } |
6145 | 6145 |
|
6146 | | - constexpr auto begin() requires (!@\placeholder{simple-view}@<R>) |
| 6146 | + constexpr auto begin() requires (!@\placeholder{simple-view}@<V>) |
6147 | 6147 | { return iterator<false>(ranges::begin(base_)); } |
6148 | 6148 |
|
6149 | | - constexpr auto begin() const requires @\placeholder{simple-view}@<R> |
| 6149 | + constexpr auto begin() const requires @\placeholder{simple-view}@<V> |
6150 | 6150 | { return iterator<true>(ranges::begin(base_)); } |
6151 | 6151 |
|
6152 | | - constexpr auto end() requires (!@\placeholder{simple-view}@<R>) |
| 6152 | + constexpr auto end() requires (!@\placeholder{simple-view}@<V>) |
6153 | 6153 | { return ranges::end(base_); } |
6154 | 6154 |
|
6155 | | - constexpr auto end() const requires @\placeholder{simple-view}@<R> |
| 6155 | + constexpr auto end() const requires @\placeholder{simple-view}@<V> |
6156 | 6156 | { return ranges::end(base_); } |
6157 | 6157 |
|
6158 | | - constexpr auto size() requires sized_range<R> |
| 6158 | + constexpr auto size() requires sized_range<V> |
6159 | 6159 | { return ranges::size(base_); } |
6160 | 6160 |
|
6161 | | - constexpr auto size() const requires sized_range<const R> |
| 6161 | + constexpr auto size() const requires sized_range<const V> |
6162 | 6162 | { return ranges::size(base_); } |
6163 | 6163 |
|
6164 | 6164 | private: |
6165 | 6165 | template<bool> struct iterator; // \expos |
6166 | | - R base_ = R(); // \expos |
| 6166 | + V base_ = V(); // \expos |
6167 | 6167 | }; |
6168 | 6168 | } |
6169 | 6169 | \end{codeblock} |
6170 | 6170 |
|
6171 | 6171 | \indexlibraryctor{elements_view}% |
6172 | 6172 | \begin{itemdecl} |
6173 | | -constexpr explicit elements_view(R base); |
| 6173 | +constexpr explicit elements_view(V base); |
6174 | 6174 | \end{itemdecl} |
6175 | 6175 |
|
6176 | 6176 | \begin{itemdescr} |
|
6184 | 6184 | \indexlibraryglobal{elements_view::iterator}% |
6185 | 6185 | \begin{codeblock} |
6186 | 6186 | namespace std::ranges { |
6187 | | - template<class R, size_t N> |
| 6187 | + template<class V, size_t N> |
6188 | 6188 | template<bool Const> |
6189 | | - class elements_view<R, N>::iterator { // \expos |
6190 | | - using base_t = conditional_t<Const, const R, R>; |
| 6189 | + class elements_view<V, N>::iterator { // \expos |
| 6190 | + using base_t = conditional_t<Const, const V, V>; |
6191 | 6191 | friend iterator<!Const>; |
6192 | 6192 |
|
6193 | 6193 | iterator_t<base_t> current_; |
|
6199 | 6199 | iterator() = default; |
6200 | 6200 | constexpr explicit iterator(iterator_t<base_t> current); |
6201 | 6201 | constexpr iterator(iterator<!Const> i) |
6202 | | - requires Const && convertible_to<iterator_t<R>, iterator_t<base_t>>; |
| 6202 | + requires Const && convertible_to<iterator_t<V>, iterator_t<base_t>>; |
6203 | 6203 |
|
6204 | 6204 | constexpr iterator_t<base_t> base() const & |
6205 | 6205 | requires copyable<iterator_t<base_t>>; |
|
6273 | 6273 | \indexlibraryctor{elements_view::iterator}% |
6274 | 6274 | \begin{itemdecl} |
6275 | 6275 | constexpr iterator(iterator<!Const> i) |
6276 | | - requires Const && convertible_to<iterator_t<R>, iterator_t<base_t>>; |
| 6276 | + requires Const && convertible_to<iterator_t<V>, iterator_t<base_t>>; |
6277 | 6277 | \end{itemdecl} |
6278 | 6278 |
|
6279 | 6279 | \begin{itemdescr} |
|
0 commit comments