From Jason Turner

[common.iterator]

Diff to HTML by rtfpessoa

tmp/tmpy8dh3mkz/{from.md → to.md} RENAMED
@@ -64,11 +64,11 @@ namespace std {
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&>())));
@@ -83,11 +83,11 @@ namespace std {
83
  };
84
 
85
  template<input_iterator I, class S>
86
  struct iterator_traits<common_iterator<I, S>> {
87
  using iterator_concept = see below;
88
- using iterator_category = see below;
89
  using value_type = iter_value_t<I>;
90
  using difference_type = iter_difference_t<I>;
91
  using pointer = see below;
92
  using reference = iter_reference_t<I>;
93
  };
 
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 decltype(auto) 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&>())));
 
83
  };
84
 
85
  template<input_iterator I, class S>
86
  struct iterator_traits<common_iterator<I, S>> {
87
  using iterator_concept = see below;
88
+ using iterator_category = see below; // not always present
89
  using value_type = iter_value_t<I>;
90
  using difference_type = iter_difference_t<I>;
91
  using pointer = see below;
92
  using reference = iter_reference_t<I>;
93
  };