From Jason Turner

[range.enumerate.view]

Diff to HTML by rtfpessoa

tmp/tmpdb2_aves/{from.md → to.md} RENAMED
@@ -23,27 +23,32 @@ namespace std::ranges {
23
  { return iterator<false>(ranges::begin(base_), 0); }
24
  constexpr auto begin() const requires range-with-movable-references<const V>
25
  { return iterator<true>(ranges::begin(base_), 0); }
26
 
27
  constexpr auto end() requires (!simple-view<V>) {
28
- if constexpr (common_range<V> && sized_range<V>)
29
  return iterator<false>(ranges::end(base_), ranges::distance(base_));
30
  else
31
  return sentinel<false>(ranges::end(base_));
32
  }
33
  constexpr auto end() const requires range-with-movable-references<const V> {
34
- if constexpr (common_range<const V> && sized_range<const V>)
35
  return iterator<true>(ranges::end(base_), ranges::distance(base_));
36
  else
37
  return sentinel<true>(ranges::end(base_));
38
  }
39
 
40
  constexpr auto size() requires sized_range<V>
41
  { return ranges::size(base_); }
42
  constexpr auto size() const requires sized_range<const V>
43
  { return ranges::size(base_); }
44
 
 
 
 
 
 
45
  constexpr V base() const & requires copy_constructible<V> { return base_; }
46
  constexpr V base() && { return std::move(base_); }
47
  };
48
 
49
  template<class R>
 
23
  { return iterator<false>(ranges::begin(base_), 0); }
24
  constexpr auto begin() const requires range-with-movable-references<const V>
25
  { return iterator<true>(ranges::begin(base_), 0); }
26
 
27
  constexpr auto end() requires (!simple-view<V>) {
28
+ if constexpr (forward_range<V> && common_range<V> && sized_range<V>)
29
  return iterator<false>(ranges::end(base_), ranges::distance(base_));
30
  else
31
  return sentinel<false>(ranges::end(base_));
32
  }
33
  constexpr auto end() const requires range-with-movable-references<const V> {
34
+ if constexpr (forward_range<const V> && common_range<const V> && sized_range<const V>)
35
  return iterator<true>(ranges::end(base_), ranges::distance(base_));
36
  else
37
  return sentinel<true>(ranges::end(base_));
38
  }
39
 
40
  constexpr auto size() requires sized_range<V>
41
  { return ranges::size(base_); }
42
  constexpr auto size() const requires sized_range<const V>
43
  { return ranges::size(base_); }
44
 
45
+ constexpr auto reserve_hint() requires approximately_sized_range<V>
46
+ { return ranges::reserve_hint(base_); }
47
+ constexpr auto reserve_hint() const requires approximately_sized_range<const V>
48
+ { return ranges::reserve_hint(base_); }
49
+
50
  constexpr V base() const & requires copy_constructible<V> { return base_; }
51
  constexpr V base() && { return std::move(base_); }
52
  };
53
 
54
  template<class R>