2 //===----------------------------------------------------------------------===//
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
8 //===----------------------------------------------------------------------===//
10 export namespace std {
11 // [iterator.assoc.types], associated types
12 // [incrementable.traits], incrementable traits
13 using std::incrementable_traits;
14 using std::iter_difference_t;
16 using std::indirectly_readable_traits;
17 using std::iter_value_t;
19 // [iterator.traits], iterator traits
20 using std::iterator_traits;
22 using std::iter_reference_t;
25 // [iterator.cust], customization point objects
26 inline namespace __cpo {
27 // [iterator.cust.move], ranges::iter_move
28 using std::ranges::__cpo::iter_move;
30 // [iterator.cust.swap], ranges::iter_swap
31 using std::ranges::__cpo::iter_swap;
35 using std::iter_rvalue_reference_t;
37 // [iterator.concepts], iterator concepts
38 // [iterator.concept.readable], concept indirectly_readable
39 using std::indirectly_readable;
41 using std::iter_common_reference_t;
43 // [iterator.concept.writable], concept indirectly_writable
44 using std::indirectly_writable;
46 // [iterator.concept.winc], concept weakly_incrementable
47 using std::weakly_incrementable;
49 // [iterator.concept.inc], concept incrementable
50 using std::incrementable;
52 // [iterator.concept.iterator], concept input_or_output_iterator
53 using std::input_or_output_iterator;
55 // [iterator.concept.sentinel], concept sentinel_for
56 using std::sentinel_for;
58 // [iterator.concept.sizedsentinel], concept sized_sentinel_for
59 using std::disable_sized_sentinel_for;
61 using std::sized_sentinel_for;
63 // [iterator.concept.input], concept input_iterator
64 using std::input_iterator;
66 // [iterator.concept.output], concept output_iterator
67 using std::output_iterator;
69 // [iterator.concept.forward], concept forward_iterator
70 using std::forward_iterator;
72 // [iterator.concept.bidir], concept bidirectional_iterator
73 using std::bidirectional_iterator;
75 // [iterator.concept.random.access], concept random_access_iterator
76 using std::random_access_iterator;
78 // [iterator.concept.contiguous], concept contiguous_iterator
79 using std::contiguous_iterator;
81 // [indirectcallable], indirect callable requirements
82 // [indirectcallable.indirectinvocable], indirect callables
83 using std::indirectly_unary_invocable;
85 using std::indirectly_regular_unary_invocable;
87 using std::indirect_unary_predicate;
89 using std::indirect_binary_predicate;
91 using std::indirect_equivalence_relation;
93 using std::indirect_strict_weak_order;
95 using std::indirect_result_t;
97 // [projected], projected
100 // [alg.req], common algorithm requirements
101 // [alg.req.ind.move], concept indirectly_movable
102 using std::indirectly_movable;
104 using std::indirectly_movable_storable;
106 // [alg.req.ind.copy], concept indirectly_copyable
107 using std::indirectly_copyable;
109 using std::indirectly_copyable_storable;
111 // [alg.req.ind.swap], concept indirectly_swappable
112 using std::indirectly_swappable;
114 // [alg.req.ind.cmp], concept indirectly_comparable
115 using std::indirectly_comparable;
117 // [alg.req.permutable], concept permutable
118 using std::permutable;
120 // [alg.req.mergeable], concept mergeable
121 using std::mergeable;
123 // [alg.req.sortable], concept sortable
126 // [iterator.primitives], primitives
127 // [std.iterator.tags], iterator tags
128 using std::bidirectional_iterator_tag;
129 using std::contiguous_iterator_tag;
130 using std::forward_iterator_tag;
131 using std::input_iterator_tag;
132 using std::output_iterator_tag;
133 using std::random_access_iterator_tag;
135 // [iterator.operations], iterator operations
141 // [range.iter.ops], range iterator operations
143 // [range.iter.op.advance], ranges::advance
144 using std::ranges::advance;
146 // [range.iter.op.distance], ranges::distance
147 using std::ranges::distance;
149 // [range.iter.op.next], ranges::next
150 using std::ranges::next;
152 // [range.iter.op.prev], ranges::prev
153 using std::ranges::prev;
154 } // namespace ranges
156 // [predef.iterators], predefined iterators and sentinels
157 // [reverse.iterators], reverse iterators
158 using std::reverse_iterator;
160 using std::operator==;
161 using std::operator!=;
162 using std::operator<;
163 using std::operator>;
164 using std::operator<=;
165 using std::operator>=;
166 using std::operator<=>;
168 using std::operator-;
169 using std::operator+;
171 using std::make_reverse_iterator;
173 // using std::disable_sized_sentinel_for;
175 // [insert.iterators], insert iterators
176 using std::back_insert_iterator;
177 using std::back_inserter;
179 using std::front_insert_iterator;
180 using std::front_inserter;
182 using std::insert_iterator;
185 // [const.iterators], constant iterators and sentinels
186 // [const.iterators.alias], alias templates
187 // using std::const_iterator;
188 // using std::const_sentinel;
189 // using std::iter_const_reference_t;
191 // [const.iterators.iterator], class template basic_const_iterator
192 // using std::basic_const_iterator;
194 // using std::common_type;
196 // using std::make_const_iterator;
198 // [move.iterators], move iterators and sentinels
199 using std::move_iterator;
201 using std::make_move_iterator;
203 using std::move_sentinel;
205 using std::common_iterator;
207 // [default.sentinel], default sentinel
208 using std::default_sentinel;
209 using std::default_sentinel_t;
211 // [iterators.counted], counted iterators
212 using std::counted_iterator;
214 // [unreachable.sentinel], unreachable sentinel
215 using std::unreachable_sentinel;
216 using std::unreachable_sentinel_t;
218 // [stream.iterators], stream iterators
219 using std::istream_iterator;
221 using std::ostream_iterator;
223 using std::istreambuf_iterator;
224 using std::ostreambuf_iterator;
226 // [iterator.range], range access