From Jason Turner

[range.common.view]

Diff to HTML by rtfpessoa

tmp/tmpmvh3lwai/{from.md → to.md} RENAMED
@@ -14,11 +14,11 @@ namespace std::ranges {
14
  constexpr explicit common_view(V r);
15
 
16
  constexpr V base() const & requires copy_constructible<V> { return base_; }
17
  constexpr V base() && { return std::move(base_); }
18
 
19
- constexpr auto begin() {
20
  if constexpr (random_access_range<V> && sized_range<V>)
21
  return ranges::begin(base_);
22
  else
23
  return common_iterator<iterator_t<V>, sentinel_t<V>>(ranges::begin(base_));
24
  }
@@ -28,11 +28,11 @@ namespace std::ranges {
28
  return ranges::begin(base_);
29
  else
30
  return common_iterator<iterator_t<const V>, sentinel_t<const V>>(ranges::begin(base_));
31
  }
32
 
33
- constexpr auto end() {
34
  if constexpr (random_access_range<V> && sized_range<V>)
35
  return ranges::begin(base_) + ranges::distance(base_);
36
  else
37
  return common_iterator<iterator_t<V>, sentinel_t<V>>(ranges::end(base_));
38
  }
@@ -48,10 +48,17 @@ namespace std::ranges {
48
  return ranges::size(base_);
49
  }
50
  constexpr auto size() const requires sized_range<const V> {
51
  return ranges::size(base_);
52
  }
 
 
 
 
 
 
 
53
  };
54
 
55
  template<class R>
56
  common_view(R&&) -> common_view<views::all_t<R>>;
57
  }
 
14
  constexpr explicit common_view(V r);
15
 
16
  constexpr V base() const & requires copy_constructible<V> { return base_; }
17
  constexpr V base() && { return std::move(base_); }
18
 
19
+ constexpr auto begin() requires (!simple-view<V>) {
20
  if constexpr (random_access_range<V> && sized_range<V>)
21
  return ranges::begin(base_);
22
  else
23
  return common_iterator<iterator_t<V>, sentinel_t<V>>(ranges::begin(base_));
24
  }
 
28
  return ranges::begin(base_);
29
  else
30
  return common_iterator<iterator_t<const V>, sentinel_t<const V>>(ranges::begin(base_));
31
  }
32
 
33
+ constexpr auto end() requires (!simple-view<V>) {
34
  if constexpr (random_access_range<V> && sized_range<V>)
35
  return ranges::begin(base_) + ranges::distance(base_);
36
  else
37
  return common_iterator<iterator_t<V>, sentinel_t<V>>(ranges::end(base_));
38
  }
 
48
  return ranges::size(base_);
49
  }
50
  constexpr auto size() const requires sized_range<const V> {
51
  return ranges::size(base_);
52
  }
53
+
54
+ constexpr auto reserve_hint() requires approximately_sized_range<V> {
55
+ return ranges::reserve_hint(base_);
56
+ }
57
+ constexpr auto reserve_hint() const requires approximately_sized_range<const V> {
58
+ return ranges::reserve_hint(base_);
59
+ }
60
  };
61
 
62
  template<class R>
63
  common_view(R&&) -> common_view<views::all_t<R>>;
64
  }