From Jason Turner

[common.iterator]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmp1hrcypry/{from.md → to.md} +12 -12
tmp/tmp1hrcypry/{from.md → to.md} RENAMED
@@ -29,50 +29,50 @@ fun(CI(counted_iterator(s.begin(), 10)), CI(default_sentinel));
29
  namespace std {
30
  template<input_or_output_iterator I, sentinel_for<I> S>
31
  requires (!same_as<I, S> && copyable<I>)
32
  class common_iterator {
33
  public:
34
- constexpr common_iterator() = default;
35
  constexpr common_iterator(I i);
36
  constexpr common_iterator(S s);
37
  template<class I2, class S2>
38
  requires convertible_to<const I2&, I> && convertible_to<const S2&, S>
39
  constexpr common_iterator(const common_iterator<I2, S2>& x);
40
 
41
  template<class I2, class S2>
42
  requires convertible_to<const I2&, I> && convertible_to<const S2&, S> &&
43
  assignable_from<I&, const I2&> && assignable_from<S&, const S2&>
44
- common_iterator& operator=(const common_iterator<I2, S2>& x);
45
 
46
- decltype(auto) operator*();
47
- decltype(auto) operator*() const
48
  requires dereferenceable<const I>;
49
- decltype(auto) operator->() const
50
  requires see below;
51
 
52
- common_iterator& operator++();
53
- decltype(auto) operator++(int);
54
 
55
  template<class I2, sentinel_for<I> S2>
56
  requires sentinel_for<S, I2>
57
- friend bool operator==(
58
  const common_iterator& x, const common_iterator<I2, S2>& y);
59
  template<class I2, sentinel_for<I> S2>
60
  requires sentinel_for<S, I2> && equality_comparable_with<I, I2>
61
- friend bool operator==(
62
  const common_iterator& x, const common_iterator<I2, S2>& y);
63
 
64
  template<sized_sentinel_for<I> I2, sized_sentinel_for<I> S2>
65
  requires sized_sentinel_for<S, I2>
66
- friend iter_difference_t<I2> operator-(
67
  const common_iterator& x, const common_iterator<I2, S2>& y);
68
 
69
- friend iter_rvalue_reference_t<I> iter_move(const common_iterator& i)
70
  noexcept(noexcept(ranges::iter_move(declval<const I&>())))
71
  requires input_iterator<I>;
72
  template<indirectly_swappable<I> I2, class S2>
73
- friend void iter_swap(const common_iterator& x, const common_iterator<I2, S2>& y)
74
  noexcept(noexcept(ranges::iter_swap(declval<const I&>(), declval<const I2&>())));
75
 
76
  private:
77
  variant<I, S> v_; // exposition only
78
  };
 
29
  namespace std {
30
  template<input_or_output_iterator I, sentinel_for<I> S>
31
  requires (!same_as<I, S> && copyable<I>)
32
  class common_iterator {
33
  public:
34
+ constexpr common_iterator() requires default_initializable<I> = default;
35
  constexpr common_iterator(I i);
36
  constexpr common_iterator(S s);
37
  template<class I2, class S2>
38
  requires convertible_to<const I2&, I> && convertible_to<const S2&, S>
39
  constexpr common_iterator(const common_iterator<I2, S2>& x);
40
 
41
  template<class I2, class S2>
42
  requires convertible_to<const I2&, I> && convertible_to<const S2&, S> &&
43
  assignable_from<I&, const I2&> && assignable_from<S&, const S2&>
44
+ constexpr common_iterator& operator=(const common_iterator<I2, S2>& x);
45
 
46
+ constexpr decltype(auto) operator*();
47
+ constexpr decltype(auto) operator*() const
48
  requires dereferenceable<const I>;
49
+ constexpr auto operator->() const
50
  requires see below;
51
 
52
+ constexpr common_iterator& operator++();
53
+ constexpr decltype(auto) operator++(int);
54
 
55
  template<class I2, sentinel_for<I> S2>
56
  requires sentinel_for<S, I2>
57
+ friend constexpr bool operator==(
58
  const common_iterator& x, const common_iterator<I2, S2>& y);
59
  template<class I2, sentinel_for<I> S2>
60
  requires sentinel_for<S, I2> && equality_comparable_with<I, I2>
61
+ friend constexpr bool operator==(
62
  const common_iterator& x, const common_iterator<I2, S2>& y);
63
 
64
  template<sized_sentinel_for<I> I2, sized_sentinel_for<I> S2>
65
  requires sized_sentinel_for<S, I2>
66
+ friend constexpr iter_difference_t<I2> operator-(
67
  const common_iterator& x, const common_iterator<I2, S2>& y);
68
 
69
+ friend constexpr iter_rvalue_reference_t<I> iter_move(const common_iterator& i)
70
  noexcept(noexcept(ranges::iter_move(declval<const I&>())))
71
  requires input_iterator<I>;
72
  template<indirectly_swappable<I> I2, class S2>
73
+ friend constexpr void iter_swap(const common_iterator& x, const common_iterator<I2, S2>& y)
74
  noexcept(noexcept(ranges::iter_swap(declval<const I&>(), declval<const I2&>())));
75
 
76
  private:
77
  variant<I, S> v_; // exposition only
78
  };