From Jason Turner

[range.to.input.iterator]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmp03he4omd/{from.md → to.md} +130 -0
tmp/tmp03he4omd/{from.md → to.md} RENAMED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #### Class template `to_input_view::iterator` <a id="range.to.input.iterator">[[range.to.input.iterator]]</a>
2
+
3
+ ``` cpp
4
+ namespace std::ranges {
5
+ template<input_range V>
6
+ requires view<V>
7
+ template<bool Const>
8
+ class to_input_view<V>::iterator {
9
+ using Base = maybe-const<Const, V>; // exposition only
10
+
11
+ iterator_t<Base> current_ = iterator_t<Base>(); // exposition only
12
+
13
+ constexpr explicit iterator(iterator_t<Base> current); // exposition only
14
+
15
+ public:
16
+ using difference_type = range_difference_t<Base>;
17
+ using value_type = range_value_t<Base>;
18
+ using iterator_concept = input_iterator_tag;
19
+
20
+ iterator() requires default_initializable<iterator_t<Base>> = default;
21
+
22
+ iterator(iterator&&) = default;
23
+ iterator& operator=(iterator&&) = default;
24
+
25
+ constexpr iterator(iterator<!Const> i)
26
+ requires Const && convertible_to<iterator_t<V>, iterator_t<Base>>;
27
+
28
+ constexpr iterator_t<Base> base() &&;
29
+ constexpr const iterator_t<Base>& base() const & noexcept;
30
+
31
+ constexpr decltype(auto) operator*() const { return *current_; }
32
+
33
+ constexpr iterator& operator++();
34
+ constexpr void operator++(int);
35
+
36
+ friend constexpr bool operator==(const iterator& x, const sentinel_t<Base>& y);
37
+
38
+ friend constexpr difference_type operator-(const sentinel_t<Base>& y, const iterator& x)
39
+ requires sized_sentinel_for<sentinel_t<Base>, iterator_t<Base>>;
40
+ friend constexpr difference_type operator-(const iterator& x, const sentinel_t<Base>& y)
41
+ requires sized_sentinel_for<sentinel_t<Base>, iterator_t<Base>>;
42
+
43
+ friend constexpr range_rvalue_reference_t<Base> iter_move(const iterator& i)
44
+ noexcept(noexcept(ranges::iter_move(i.current_)));
45
+
46
+ friend constexpr void iter_swap(const iterator& x, const iterator& y)
47
+ noexcept(noexcept(ranges::iter_swap(x.current_, y.current_)))
48
+ requires indirectly_swappable<iterator_t<Base>>;
49
+ };
50
+ }
51
+ ```
52
+
53
+ ``` cpp
54
+ constexpr explicit iterator(iterator_t<Base> current);
55
+ ```
56
+
57
+ *Effects:* Initializes *current\_* with `std::move(current)`.
58
+
59
+ ``` cpp
60
+ constexpr iterator(iterator<!Const> i)
61
+ requires Const && convertible_to<iterator_t<V>, iterator_t<Base>>;
62
+ ```
63
+
64
+ *Effects:* Initializes *current\_* with `std::move(i.`*`current_`*`)`.
65
+
66
+ ``` cpp
67
+ constexpr iterator_t<Base> base() &&;
68
+ ```
69
+
70
+ *Returns:* `std::move(`*`current_`*`)`.
71
+
72
+ ``` cpp
73
+ constexpr const iterator_t<Base>& base() const & noexcept;
74
+ ```
75
+
76
+ *Returns:* *current\_*.
77
+
78
+ ``` cpp
79
+ constexpr iterator& operator++();
80
+ ```
81
+
82
+ *Effects:* Equivalent to:
83
+
84
+ ``` cpp
85
+ ++current_;
86
+ return *this;
87
+ ```
88
+
89
+ ``` cpp
90
+ constexpr void operator++(int);
91
+ ```
92
+
93
+ *Effects:* Equivalent to: `++*this;`
94
+
95
+ ``` cpp
96
+ friend constexpr bool operator==(const iterator& x, const sentinel_t<Base>& y);
97
+ ```
98
+
99
+ *Returns:* `x.`*`current_`*` == y`.
100
+
101
+ ``` cpp
102
+ friend constexpr difference_type operator-(const sentinel_t<Base>& y, const iterator& x)
103
+ requires sized_sentinel_for<sentinel_t<Base>, iterator_t<Base>>;
104
+ ```
105
+
106
+ *Returns:* `y - x.`*`current_`*.
107
+
108
+ ``` cpp
109
+ friend constexpr difference_type operator-(const iterator& x, const sentinel_t<Base>& y)
110
+ requires sized_sentinel_for<sentinel_t<Base>, iterator_t<Base>>;
111
+ ```
112
+
113
+ *Returns:* `x.`*`current_`*` - y`.
114
+
115
+ ``` cpp
116
+ friend constexpr range_rvalue_reference_t<Base> iter_move(const iterator& i)
117
+ noexcept(noexcept(ranges::iter_move(i.current_)));
118
+ ```
119
+
120
+ *Effects:* Equivalent to: `return ranges::iter_move(i.`*`current_`*`);`
121
+
122
+ ``` cpp
123
+ friend constexpr void iter_swap(const iterator& x, const iterator& y)
124
+ noexcept(noexcept(ranges::iter_swap(x.current_, y.current_)))
125
+ requires indirectly_swappable<iterator_t<Base>>;
126
+ ```
127
+
128
+ *Effects:* Equivalent to:
129
+ `ranges::iter_swap(x.`*`current_`*`, y.`*`current_`*`);`
130
+