• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// -*- C++ -*-
2//===----------------------------------------------------------------------===//
3//
4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5// See https://llvm.org/LICENSE.txt for license information.
6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7//
8//===----------------------------------------------------------------------===//
9
10module;
11#include <iterator>
12
13export module std:iterator;
14export namespace std {
15  // [iterator.assoc.types], associated types
16  // [incrementable.traits], incrementable traits
17  using std::incrementable_traits;
18  using std::iter_difference_t;
19
20  using std::indirectly_readable_traits;
21  using std::iter_value_t;
22
23  // [iterator.traits], iterator traits
24  using std::iterator_traits;
25
26  using std::iter_reference_t;
27
28  namespace ranges {
29    // [iterator.cust], customization point objects
30    inline namespace __cpo {
31      // [iterator.cust.move], ranges::iter_move
32      using std::ranges::__cpo::iter_move;
33
34      // [iterator.cust.swap], ranges::iter_swap
35      using std::ranges::__cpo::iter_swap;
36    } // namespace __cpo
37  }   // namespace ranges
38
39  using std::iter_rvalue_reference_t;
40
41  // [iterator.concepts], iterator concepts
42  // [iterator.concept.readable], concept indirectly_readable
43  using std::indirectly_readable;
44
45  using std::iter_common_reference_t;
46
47  // [iterator.concept.writable], concept indirectly_writable
48  using std::indirectly_writable;
49
50  // [iterator.concept.winc], concept weakly_incrementable
51  using std::weakly_incrementable;
52
53  // [iterator.concept.inc], concept incrementable
54  using std::incrementable;
55
56  // [iterator.concept.iterator], concept input_or_output_iterator
57  using std::input_or_output_iterator;
58
59  // [iterator.concept.sentinel], concept sentinel_for
60  using std::sentinel_for;
61
62  // [iterator.concept.sizedsentinel], concept sized_sentinel_for
63  using std::disable_sized_sentinel_for;
64
65  using std::sized_sentinel_for;
66
67  // [iterator.concept.input], concept input_iterator
68  using std::input_iterator;
69
70  // [iterator.concept.output], concept output_iterator
71  using std::output_iterator;
72
73  // [iterator.concept.forward], concept forward_iterator
74  using std::forward_iterator;
75
76  // [iterator.concept.bidir], concept bidirectional_iterator
77  using std::bidirectional_iterator;
78
79  // [iterator.concept.random.access], concept random_access_iterator
80  using std::random_access_iterator;
81
82  // [iterator.concept.contiguous], concept contiguous_iterator
83  using std::contiguous_iterator;
84
85  // [indirectcallable], indirect callable requirements
86  // [indirectcallable.indirectinvocable], indirect callables
87  using std::indirectly_unary_invocable;
88
89  using std::indirectly_regular_unary_invocable;
90
91  using std::indirect_unary_predicate;
92
93  using std::indirect_binary_predicate;
94
95  using std::indirect_equivalence_relation;
96
97  using std::indirect_strict_weak_order;
98
99  using std::indirect_result_t;
100
101  // [projected], projected
102  using std::projected;
103
104  using std::incrementable_traits;
105
106  // [alg.req], common algorithm requirements
107  // [alg.req.ind.move], concept indirectly_movable
108  using std::indirectly_movable;
109
110  using std::indirectly_movable_storable;
111
112  // [alg.req.ind.copy], concept indirectly_copyable
113  using std::indirectly_copyable;
114
115  using std::indirectly_copyable_storable;
116
117  // [alg.req.ind.swap], concept indirectly_swappable
118  using std::indirectly_swappable;
119
120  // [alg.req.ind.cmp], concept indirectly_comparable
121  using std::indirectly_comparable;
122
123  // [alg.req.permutable], concept permutable
124  using std::permutable;
125
126  // [alg.req.mergeable], concept mergeable
127  using std::mergeable;
128
129  // [alg.req.sortable], concept sortable
130  using std::sortable;
131
132  // [iterator.primitives], primitives
133  // [std.iterator.tags], iterator tags
134  using std::bidirectional_iterator_tag;
135  using std::contiguous_iterator_tag;
136  using std::forward_iterator_tag;
137  using std::input_iterator_tag;
138  using std::output_iterator_tag;
139  using std::random_access_iterator_tag;
140
141  // [iterator.operations], iterator operations
142  using std::advance;
143  using std::distance;
144  using std::next;
145  using std::prev;
146
147  // [range.iter.ops], range iterator operations
148  namespace ranges {
149    // [range.iter.op.advance], ranges​::​advance
150    using std::ranges::advance;
151
152    // [range.iter.op.distance], ranges​::​distance
153    using std::ranges::distance;
154
155    // [range.iter.op.next], ranges​::​next
156    using std::ranges::next;
157
158    // [range.iter.op.prev], ranges​::​prev
159    using std::ranges::prev;
160  } // namespace ranges
161
162  // [predef.iterators], predefined iterators and sentinels
163  // [reverse.iterators], reverse iterators
164  using std::reverse_iterator;
165
166  using std::operator==;
167  using std::operator!=;
168  using std::operator<;
169  using std::operator>;
170  using std::operator<=;
171  using std::operator>=;
172  using std::operator<=>;
173
174  using std::operator-;
175  using std::operator+;
176
177  using std::make_reverse_iterator;
178
179  // using std::disable_sized_sentinel_for;
180
181  // [insert.iterators], insert iterators
182  using std::back_insert_iterator;
183  using std::back_inserter;
184
185  using std::front_insert_iterator;
186  using std::front_inserter;
187
188  using std::insert_iterator;
189  using std::inserter;
190
191  // [const.iterators], constant iterators and sentinels
192  // [const.iterators.alias], alias templates
193  //  using std::const_iterator;
194  //  using std::const_sentinel;
195  //  using std::iter_const_reference_t;
196
197  // [const.iterators.iterator], class template basic_const_iterator
198  //  using std::basic_const_iterator;
199
200  // using std::common_type;
201
202  //  using std::make_const_iterator;
203
204  // [move.iterators], move iterators and sentinels
205  using std::move_iterator;
206
207  using std::make_move_iterator;
208
209  using std::move_sentinel;
210
211  using std::common_iterator;
212
213  using std::incrementable_traits;
214
215  // [default.sentinel], default sentinel
216  using std::default_sentinel;
217  using std::default_sentinel_t;
218
219  // [iterators.counted], counted iterators
220  using std::counted_iterator;
221
222  // [unreachable.sentinel], unreachable sentinel
223  using std::unreachable_sentinel;
224  using std::unreachable_sentinel_t;
225
226  // [stream.iterators], stream iterators
227  using std::istream_iterator;
228
229  using std::ostream_iterator;
230
231  using std::istreambuf_iterator;
232  using std::ostreambuf_iterator;
233
234  // [iterator.range], range access
235  using std::begin;
236  using std::cbegin;
237  using std::cend;
238  using std::crbegin;
239  using std::crend;
240  using std::end;
241  using std::rbegin;
242  using std::rend;
243
244  using std::empty;
245  using std::size;
246  using std::ssize;
247
248  using std::data;
249
250  // [depr.iterator]
251  using std::iterator;
252} // namespace std
253