From Jason Turner

[range.reverse]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpgk73g0bp/{from.md → to.md} +12 -10
tmp/tmpgk73g0bp/{from.md → to.md} RENAMED
@@ -8,25 +8,20 @@ iterates the same elements in reverse order.
8
  The name `views::reverse` denotes a range adaptor object
9
  [[range.adaptor.object]]. Given a subexpression `E`, the expression
10
  `views::reverse(E)` is expression-equivalent to:
11
 
12
  - If the type of `E` is a (possibly cv-qualified) specialization of
13
- `reverse_view`, equivalent to `E.base()`.
14
  - Otherwise, if the type of `E` is cv
15
  `subrange<reverse_iterator<I>, reverse_iterator<I>, K>` for some
16
  iterator type `I` and value `K` of type `subrange_kind`,
17
- - if `K` is `subrange_kind::sized`, equivalent to:
18
- ``` cpp
19
- subrange<I, I, K>(E.end().base(), E.begin().base(), E.size())
20
- ```
21
- - otherwise, equivalent to:
22
- ``` cpp
23
- subrange<I, I, K>(E.end().base(), E.begin().base())
24
- ```
25
 
26
  However, in either case `E` is evaluated only once.
27
- - Otherwise, equivalent to `reverse_view{E}`.
28
 
29
  [*Example 1*:
30
 
31
  ``` cpp
32
  vector<int> is {0,1,2,3,4};
@@ -66,10 +61,17 @@ namespace std::ranges {
66
  }
67
 
68
  constexpr auto size() const requires sized_range<const V> {
69
  return ranges::size(base_);
70
  }
 
 
 
 
 
 
 
71
  };
72
 
73
  template<class R>
74
  reverse_view(R&&) -> reverse_view<views::all_t<R>>;
75
  }
 
8
  The name `views::reverse` denotes a range adaptor object
9
  [[range.adaptor.object]]. Given a subexpression `E`, the expression
10
  `views::reverse(E)` is expression-equivalent to:
11
 
12
  - If the type of `E` is a (possibly cv-qualified) specialization of
13
+ `reverse_view`, then `E.base()`.
14
  - Otherwise, if the type of `E` is cv
15
  `subrange<reverse_iterator<I>, reverse_iterator<I>, K>` for some
16
  iterator type `I` and value `K` of type `subrange_kind`,
17
+ - if `K` is `subrange_kind::sized`, then
18
+ `subrange<I, I, K>(E.end().base(), E.begin().base(), E.size())`;
19
+ - otherwise, `subrange<I, I, K>(E.end().base(), E.begin().base())`.
 
 
 
 
 
20
 
21
  However, in either case `E` is evaluated only once.
22
+ - Otherwise, `reverse_view{E}`.
23
 
24
  [*Example 1*:
25
 
26
  ``` cpp
27
  vector<int> is {0,1,2,3,4};
 
61
  }
62
 
63
  constexpr auto size() const requires sized_range<const V> {
64
  return ranges::size(base_);
65
  }
66
+
67
+ constexpr auto reserve_hint() requires approximately_sized_range<V> {
68
+ return ranges::reserve_hint(base_);
69
+ }
70
+ constexpr auto reserve_hint() const requires approximately_sized_range<const V> {
71
+ return ranges::reserve_hint(base_);
72
+ }
73
  };
74
 
75
  template<class R>
76
  reverse_view(R&&) -> reverse_view<views::all_t<R>>;
77
  }