// -*- C++ -*-
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
export namespace std {
// [iterator.assoc.types], associated types
// [incrementable.traits], incrementable traits
using std::incrementable_traits;
using std::iter_difference_t;
using std::indirectly_readable_traits;
using std::iter_value_t;
// [iterator.traits], iterator traits
using std::iterator_traits;
using std::iter_reference_t;
namespace ranges {
// [iterator.cust], customization point objects
inline namespace __cpo {
// [iterator.cust.move], ranges::iter_move
using std::ranges::__cpo::iter_move;
// [iterator.cust.swap], ranges::iter_swap
using std::ranges::__cpo::iter_swap;
} // namespace __cpo
} // namespace ranges
using std::iter_rvalue_reference_t;
// [iterator.concepts], iterator concepts
// [iterator.concept.readable], concept indirectly_readable
using std::indirectly_readable;
using std::iter_common_reference_t;
// [iterator.concept.writable], concept indirectly_writable
using std::indirectly_writable;
// [iterator.concept.winc], concept weakly_incrementable
using std::weakly_incrementable;
// [iterator.concept.inc], concept incrementable
using std::incrementable;
// [iterator.concept.iterator], concept input_or_output_iterator
using std::input_or_output_iterator;
// [iterator.concept.sentinel], concept sentinel_for
using std::sentinel_for;
// [iterator.concept.sizedsentinel], concept sized_sentinel_for
using std::disable_sized_sentinel_for;
using std::sized_sentinel_for;
// [iterator.concept.input], concept input_iterator
using std::input_iterator;
// [iterator.concept.output], concept output_iterator
using std::output_iterator;
// [iterator.concept.forward], concept forward_iterator
using std::forward_iterator;
// [iterator.concept.bidir], concept bidirectional_iterator
using std::bidirectional_iterator;
// [iterator.concept.random.access], concept random_access_iterator
using std::random_access_iterator;
// [iterator.concept.contiguous], concept contiguous_iterator
using std::contiguous_iterator;
// [indirectcallable], indirect callable requirements
// [indirectcallable.indirectinvocable], indirect callables
using std::indirectly_unary_invocable;
using std::indirectly_regular_unary_invocable;
using std::indirect_unary_predicate;
using std::indirect_binary_predicate;
using std::indirect_equivalence_relation;
using std::indirect_strict_weak_order;
using std::indirect_result_t;
// [projected], projected
using std::projected;
// [alg.req], common algorithm requirements
// [alg.req.ind.move], concept indirectly_movable
using std::indirectly_movable;
using std::indirectly_movable_storable;
// [alg.req.ind.copy], concept indirectly_copyable
using std::indirectly_copyable;
using std::indirectly_copyable_storable;
// [alg.req.ind.swap], concept indirectly_swappable
using std::indirectly_swappable;
// [alg.req.ind.cmp], concept indirectly_comparable
using std::indirectly_comparable;
// [alg.req.permutable], concept permutable
using std::permutable;
// [alg.req.mergeable], concept mergeable
using std::mergeable;
// [alg.req.sortable], concept sortable
using std::sortable;
// [iterator.primitives], primitives
// [std.iterator.tags], iterator tags
using std::bidirectional_iterator_tag;
using std::contiguous_iterator_tag;
using std::forward_iterator_tag;
using std::input_iterator_tag;
using std::output_iterator_tag;
using std::random_access_iterator_tag;
// [iterator.operations], iterator operations
using std::advance;
using std::distance;
using std::next;
using std::prev;
// [range.iter.ops], range iterator operations
namespace ranges {
// [range.iter.op.advance], ranges::advance
using std::ranges::advance;
// [range.iter.op.distance], ranges::distance
using std::ranges::distance;
// [range.iter.op.next], ranges::next
using std::ranges::next;
// [range.iter.op.prev], ranges::prev
using std::ranges::prev;
} // namespace ranges
// [predef.iterators], predefined iterators and sentinels
// [reverse.iterators], reverse iterators
using std::reverse_iterator;
using std::operator==;
using std::operator!=;
using std::operator<;
using std::operator>;
using std::operator<=;
using std::operator>=;
using std::operator<=>;
using std::operator-;
using std::operator+;
using std::make_reverse_iterator;
// using std::disable_sized_sentinel_for;
// [insert.iterators], insert iterators
using std::back_insert_iterator;
using std::back_inserter;
using std::front_insert_iterator;
using std::front_inserter;
using std::insert_iterator;
using std::inserter;
// [const.iterators], constant iterators and sentinels
// [const.iterators.alias], alias templates
// using std::const_iterator;
// using std::const_sentinel;
// using std::iter_const_reference_t;
// [const.iterators.iterator], class template basic_const_iterator
// using std::basic_const_iterator;
// using std::common_type;
// using std::make_const_iterator;
// [move.iterators], move iterators and sentinels
using std::move_iterator;
using std::make_move_iterator;
using std::move_sentinel;
using std::common_iterator;
// [default.sentinel], default sentinel
using std::default_sentinel;
using std::default_sentinel_t;
// [iterators.counted], counted iterators
using std::counted_iterator;
// [unreachable.sentinel], unreachable sentinel
using std::unreachable_sentinel;
using std::unreachable_sentinel_t;
// [stream.iterators], stream iterators
using std::istream_iterator;
using std::ostream_iterator;
using std::istreambuf_iterator;
using std::ostreambuf_iterator;
// [iterator.range], range access
using std::begin;
using std::cbegin;
using std::cend;
using std::crbegin;
using std::crend;
using std::end;
using std::rbegin;
using std::rend;
using std::empty;
using std::size;
using std::ssize;
using std::data;
// [depr.iterator]
using std::iterator;
} // namespace std