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