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