| // -*- 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 { | 
 |   namespace ranges { | 
 |     inline namespace __cpo { | 
 |       // [range.access], range access | 
 |       using std::ranges::__cpo::begin; | 
 |       using std::ranges::__cpo::cbegin; | 
 |       using std::ranges::__cpo::cend; | 
 |       using std::ranges::__cpo::crbegin; | 
 |       using std::ranges::__cpo::crend; | 
 |       using std::ranges::__cpo::end; | 
 |       using std::ranges::__cpo::rbegin; | 
 |       using std::ranges::__cpo::rend; | 
 |  | 
 |       using std::ranges::__cpo::cdata; | 
 |       using std::ranges::__cpo::data; | 
 |       using std::ranges::__cpo::empty; | 
 |       using std::ranges::__cpo::size; | 
 |       using std::ranges::__cpo::ssize; | 
 |     } // namespace __cpo | 
 |  | 
 |     // [range.range], ranges | 
 |     using std::ranges::range; | 
 |  | 
 |     using std::ranges::enable_borrowed_range; | 
 |  | 
 |     using std::ranges::borrowed_range; | 
 |  | 
 |     // using std::ranges::const_iterator_t; | 
 |     // using std::ranges::const_sentinel_t; | 
 |     using std::ranges::iterator_t; | 
 |     // using std::ranges::range_const_reference_t; | 
 |     using std::ranges::range_common_reference_t; | 
 |     using std::ranges::range_difference_t; | 
 |     using std::ranges::range_reference_t; | 
 |     using std::ranges::range_rvalue_reference_t; | 
 |     using std::ranges::range_size_t; | 
 |     using std::ranges::range_value_t; | 
 |     using std::ranges::sentinel_t; | 
 |  | 
 |     // [range.sized], sized ranges | 
 |     using std::ranges::disable_sized_range; | 
 |     using std::ranges::sized_range; | 
 |  | 
 |     // [range.view], views | 
 |     using std::ranges::enable_view; | 
 |     using std::ranges::view; | 
 |     using std::ranges::view_base; | 
 |  | 
 |     // [range.refinements], other range refinements | 
 |     using std::ranges::bidirectional_range; | 
 |     using std::ranges::common_range; | 
 |     // using std::ranges::constant_range; | 
 |     using std::ranges::contiguous_range; | 
 |     using std::ranges::forward_range; | 
 |     using std::ranges::input_range; | 
 |     using std::ranges::output_range; | 
 |     using std::ranges::random_access_range; | 
 |     using std::ranges::viewable_range; | 
 |  | 
 |     // [view.interface], class template view_interface | 
 |     using std::ranges::view_interface; | 
 |  | 
 |     // [range.subrange], sub-ranges | 
 |     using std::ranges::subrange; | 
 |     using std::ranges::subrange_kind; | 
 |  | 
 |     using std::ranges::get; | 
 |   } // namespace ranges | 
 |  | 
 |   using std::ranges::get; | 
 |  | 
 |   namespace ranges { | 
 |  | 
 |     // [range.dangling], dangling iterator handling | 
 |     using std::ranges::dangling; | 
 |  | 
 |     // [range.elementsof], class template elements_of | 
 |     // using std::ranges::elements_of; | 
 |  | 
 |     using std::ranges::borrowed_iterator_t; | 
 |  | 
 |     using std::ranges::borrowed_subrange_t; | 
 |  | 
 | #if _LIBCPP_STD_VER >= 23 | 
 |     // [range.utility.conv], range conversions | 
 |     using std::ranges::to; | 
 | #endif | 
 |  | 
 |     // [range.empty], empty view | 
 |     using std::ranges::empty_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::empty; | 
 |     } | 
 |  | 
 |     // [range.single], single view | 
 |     using std::ranges::single_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::single; | 
 |     } // namespace views | 
 |  | 
 |     // [range.iota], iota view | 
 |     using std::ranges::iota_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::iota; | 
 | #if _LIBCPP_STD_VER >= 26 | 
 |       using std::ranges::views::indices; | 
 | #endif | 
 |     } // namespace views | 
 |  | 
 | #if _LIBCPP_STD_VER >= 23 | 
 |     // [range.repeat], repeat view | 
 |     using std::ranges::repeat_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::repeat; | 
 |     } // namespace views | 
 | #endif // _LIBCPP_STD_VER >= 23 | 
 |  | 
 | #if _LIBCPP_HAS_LOCALIZATION | 
 |     // [range.istream], istream view | 
 |     using std::ranges::basic_istream_view; | 
 |     using std::ranges::istream_view; | 
 | #  if _LIBCPP_HAS_WIDE_CHARACTERS | 
 |     using std::ranges::wistream_view; | 
 | #  endif | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::istream; | 
 |     } | 
 | #endif // _LIBCPP_HAS_LOCALIZATION | 
 |  | 
 |     // Note: This declaration not in the synopsis or explicitly in the wording. | 
 |     // However it is needed for the range adaptors. | 
 |     // [range.adaptor.object]/3 | 
 |     //   The template parameter D for range_adaptor_closure may be an | 
 |     //   incomplete type. If an expression of type cv D is used as an operand | 
 |     //   to the | operator, D shall be complete and model | 
 |     //   derived_from<range_adaptor_closure<D>>. The behavior of an expression | 
 |     //   involving an object of type cv D as an operand to the | operator is | 
 |     //   undefined if overload resolution selects a program-defined operator| | 
 |     //   function. | 
 |     // This is used internally in C++20 mode. | 
 |     using std::ranges::operator|; | 
 | #if _LIBCPP_STD_VER >= 23 | 
 |     // [range.adaptor.object], range adaptor objects | 
 |     using std::ranges::range_adaptor_closure; | 
 | #endif | 
 |  | 
 |     // [range.all], all view | 
 |     namespace views { | 
 |       using std::ranges::views::all; | 
 |       using std::ranges::views::all_t; | 
 |     } // namespace views | 
 |  | 
 |     // [range.ref.view], ref view | 
 |     using std::ranges::ref_view; | 
 |  | 
 |     // [range.owning.view], owning view | 
 |     using std::ranges::owning_view; | 
 |  | 
 | #if _LIBCPP_STD_VER >= 23 | 
 |     // [range.as.rvalue], as rvalue view | 
 |     using std::ranges::as_rvalue_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::as_rvalue; | 
 |     } // namespace views | 
 | #endif // _LIBCPP_STD_VER >= 23 | 
 |  | 
 |     // [range.filter], filter view | 
 |     using std::ranges::filter_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::filter; | 
 |     } // namespace views | 
 |  | 
 |     // [range.transform], transform view | 
 |     using std::ranges::transform_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::transform; | 
 |     } // namespace views | 
 |  | 
 |     // [range.take], take view | 
 |     using std::ranges::take_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::take; | 
 |     } // namespace views | 
 |  | 
 |     // [range.take.while], take while view | 
 |     using std::ranges::take_while_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::take_while; | 
 |     } // namespace views | 
 |  | 
 |     // [range.drop], drop view | 
 |     using std::ranges::drop_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::drop; | 
 |     } // namespace views | 
 |  | 
 |     // [range.drop.while], drop while view | 
 |     using std::ranges::drop_while_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::drop_while; | 
 |     } // namespace views | 
 |  | 
 |     using std::ranges::join_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::join; | 
 |     } // namespace views | 
 |  | 
 | #if _LIBCPP_STD_VER >= 23 | 
 |     // [range.join.with] | 
 |     using std::ranges::join_with_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::join_with; | 
 |     } // namespace views | 
 | #endif // _LIBCPP_STD_VER >= 23 | 
 |  | 
 |     using std::ranges::lazy_split_view; | 
 |  | 
 |     // [range.split], split view | 
 |     using std::ranges::split_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::lazy_split; | 
 |       using std::ranges::views::split; | 
 |     } // namespace views | 
 |  | 
 |     // [range.counted], counted view | 
 |     namespace views { | 
 |       using std::ranges::views::counted; | 
 |     } // namespace views | 
 |  | 
 |     // [range.common], common view | 
 |     using std::ranges::common_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::common; | 
 |     } // namespace views | 
 |  | 
 |     // [range.reverse], reverse view | 
 |     using std::ranges::reverse_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::reverse; | 
 |     } // namespace views | 
 |  | 
 |     // [range.as.const], as const view | 
 | #if 0 | 
 |     using std::ranges::as_const_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::as_const; | 
 |     } // namespace views | 
 | #endif | 
 |     // [range.elements], elements view | 
 |     using std::ranges::elements_view; | 
 |  | 
 |     using std::ranges::keys_view; | 
 |     using std::ranges::values_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::elements; | 
 |       using std::ranges::views::keys; | 
 |       using std::ranges::views::values; | 
 |     } // namespace views | 
 |  | 
 | #if _LIBCPP_STD_VER >= 23 | 
 |     // [range.zip], zip view | 
 |     using std::ranges::zip_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::zip; | 
 |     } // namespace views | 
 |  | 
 |     // [range.zip.transform], zip transform view | 
 |     using std::ranges::zip_transform_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::zip_transform; | 
 |     } | 
 | #endif // _LIBCPP_STD_VER >= 23 | 
 |  | 
 | #if 0 | 
 |     using std::ranges::adjacent_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::adjacent; | 
 |       using std::ranges::views::pairwise; | 
 |     } // namespace views | 
 |  | 
 |     using std::ranges::adjacent_transform_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::adjacent_transform; | 
 |       using std::ranges::views::pairwise_transform; | 
 |     } // namespace views | 
 |  | 
 |     using std::ranges::chunk_view; | 
 |  | 
 |     using std::ranges::chunk_view<V>; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::chunk; | 
 |     } | 
 |  | 
 |     using std::ranges::slide_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::slide; | 
 |     } | 
 | #endif | 
 |  | 
 | #if _LIBCPP_STD_VER >= 23 | 
 |     // [range.chunk.by], chunk by view | 
 |     using std::ranges::chunk_by_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::chunk_by; | 
 |     } | 
 | #endif // _LIBCPP_STD_VER >= 23 | 
 |  | 
 | #if 0 | 
 |     // [range.stride], stride view | 
 |     using std::ranges::stride_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::stride; | 
 |     } | 
 |  | 
 |     using std::ranges::cartesian_product_view; | 
 |  | 
 |     namespace views { | 
 |       using std::ranges::views::cartesian_product; | 
 |     } | 
 | #endif | 
 |   } // namespace ranges | 
 |  | 
 |   namespace views = ranges::views; | 
 |  | 
 |   using std::tuple_element; | 
 |   using std::tuple_size; | 
 |  | 
 | #if _LIBCPP_STD_VER >= 23 | 
 |   using std::from_range; | 
 |   using std::from_range_t; | 
 | #endif // _LIBCPP_STD_VER >= 23 | 
 | } // namespace std |