Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      Standard library header <ranges> (C++20)

      From cppreference.com
      <cpp‎ |header
       
       
      Standard library headers
       

      This header is part of theranges library.

      Contents

      [edit]Namespace aliases

      namespace std{

         namespace views= ranges::views;

      }

      The namespace aliasstd::views is provided as a shorthand forstd::ranges::views.

      Includes

      (C++20)
      Three-way comparison operator support[edit]
      std::initializer_list class template[edit]
      Range iterators[edit]

      Concepts

      Range concepts
      Defined in namespacestd::ranges
      specifies that a type is a range, that is, it provides abegin iterator and anend sentinel
      (concept)[edit]
      specifies that a type is arange and iterators obtained from an expression of it can be safely returned without danger of dangling
      (concept)[edit]
      specifies that a range can estimate its size in constant time
      (concept)[edit]
      specifies that a range knows its size in constant time
      (concept)[edit]
      specifies that a range is a view, that is, it has constant time copy/move/assignment
      (concept)[edit]
      specifies a range whose iterator type satisfiesinput_iterator
      (concept)[edit]
      specifies a range whose iterator type satisfiesoutput_iterator
      (concept)[edit]
      specifies a range whose iterator type satisfiesforward_iterator
      (concept)[edit]
      specifies a range whose iterator type satisfiesbidirectional_iterator
      (concept)[edit]
      specifies a range whose iterator type satisfiesrandom_access_iterator
      (concept)[edit]
      specifies a range whose iterator type satisfiescontiguous_iterator
      (concept)[edit]
      specifies that a range has identical iterator and sentinel types
      (concept)[edit]
      specifies the requirements for arange to be safely convertible to aview
      (concept)[edit]
      specifies that a range has read-only elements
      (concept)[edit]

      Functions

      Range conversions
      Defined in namespacestd::ranges
      (C++23)
      constructs a new non-view object from an input range
      (function template)[edit]

      Classes

      Range primitives
      Defined in namespacestd::ranges
      obtains iterator and sentinel types of a range
      (alias template)[edit]
      obtains size, difference, and value types of a range
      (alias template)[edit]
      obtains reference types of a range
      (alias template)[edit]
      Views
      Defined in namespacestd::ranges
      helper class template for defining aview, using thecuriously recurring template pattern
      (class template)[edit]
      combines an iterator-sentinel pair into aview
      (class template)[edit]
      Dangling iterator handling
      Defined in namespacestd::ranges
      a placeholder type indicating that an iterator or asubrange should not be returned since it would be dangling
      (class)[edit]
      obtains iterator type orsubrange type of aborrowed_range
      (alias template)[edit]
      Other utilities
      Defined in namespacestd::ranges
      tags a range to be treated as a sequence rather than a single value
      (class template)[edit]
      Factories
      Defined in namespacestd::ranges
      an emptyview with no elements
      (class template)(variable template)[edit]
      aview that contains a single element of a specified value
      (class template)(customization point object)[edit]
      aview consisting of a sequence generated by repeatedly incrementing an initial value
      (class template)(customization point object)[edit]
      aview consisting of a generated sequence by repeatedly producing the same value
      (class template)(customization point object)[edit]
      aview consisting of the elements obtained by successive application ofoperator>> on the associated input stream
      (class template)(customization point object)[edit]
      Adaptors
      Defined in namespacestd::ranges
      helper base class template for defining a range adaptor closure object
      (class template)[edit]
      aview that includes all elements of arange
      (alias template)(range adaptor object)[edit]
      aview of the elements of some otherrange
      (class template)[edit]
      aview with unique ownership of somerange
      (class template)[edit]
      aview of a sequence that casts each element to an rvalue
      (class template)(range adaptor object)[edit]
      aview that consists of the elements of arange that satisfies a predicate
      (class template)(range adaptor object)[edit]
      aview of a sequence that applies a transformation function to each element
      (class template)(range adaptor object)[edit]
      aview consisting of the first N elements of anotherview
      (class template)(range adaptor object)[edit]
      aview consisting of the initial elements of anotherview, until the first element on which a predicate returnsfalse
      (class template)(range adaptor object)[edit]
      aview consisting of elements of anotherview, skipping the first N elements
      (class template)(range adaptor object)[edit]
      aview consisting of the elements of anotherview, skipping the initial subsequence of elements until the first element where the predicate returnsfalse
      (class template)(range adaptor object)[edit]
      aview consisting of the sequence obtained from flattening aview ofranges
      (class template)(range adaptor object)[edit]
      aview consisting of the sequence obtained from flattening a view of ranges, with the delimiter in between elements
      (class template)(range adaptor object)[edit]
      aview over the subranges obtained from splitting anotherview using a delimiter
      (class template)(range adaptor object)[edit]
      aview over the subranges obtained from splitting anotherview using a delimiter
      (class template)(range adaptor object)[edit]
      aview consisting of concatenation of the adapted views
      (class template)(customization point object)[edit]
      creates a subrange from an iterator and a count
      (customization point object)[edit]
      converts aview into acommon_range
      (class template)(range adaptor object)[edit]
      aview that iterates over the elements of another bidirectional view in reverse order
      (class template)(range adaptor object)[edit]
      converts aview into aconstant_range
      (class template)(range adaptor object)[edit]
      takes aview consisting oftuple-like values and a number N and produces aview of Nth element of each tuple
      (class template)(range adaptor object)[edit]
      takes aview consisting of pair-like values and produces aview of the first elements of each pair
      (class template)(range adaptor object)[edit]
      takes aview consisting of pair-like values and produces aview of the second elements of each pair
      (class template)(range adaptor object)[edit]
      aview that maps each element of adapted sequence to a tuple of both the element's position and its value
      (class template)(range adaptor object)[edit]
      aview consisting of tuples of references to corresponding elements of the adapted views
      (class template)(customization point object)[edit]
      aview consisting of results of application of a transformation function to corresponding elements of the adapted views
      (class template)(customization point object)[edit]
      aview consisting of tuples of references to adjacent elements of the adapted view
      (class template)(range adaptor object)[edit]
      aview consisting of results of application of a transformation function to adjacent elements of the adapted view
      (class template)(range adaptor object)[edit]
      a range ofviews that areN-sized non-overlapping successive chunks of the elements of anotherview
      (class template)(range adaptor object)[edit]
      aview whose Mth element is aview over the Mth through (M + N - 1)th elements of anotherview
      (class template)(range adaptor object)[edit]
      splits theview into subranges between each pair of adjacent elements for which the given predicate returnsfalse
      (class template)(range adaptor object)[edit]
      aview consisting of elements of anotherview, advancing over N elements at a time
      (class template)(range adaptor object)[edit]
      aview consisting of tuples of results calculated by the n-ary cartesian product of the adapted views
      (class template)(customization point object)[edit]
      aview that caches the last-accessed element of its underlying sequence
      (class template)(range adaptor object)[edit]
      converts aview into a range that isinput_range-only and non-common_range
      (class template)(range adaptor object)[edit]

      Customization point objects

      Range access
      Defined in namespacestd::ranges
      returns an iterator to the beginning of a range
      (customization point object)[edit]
      returns a sentinel indicating the end of a range
      (customization point object)[edit]
      returns an iterator to the beginning of a read-only range
      (customization point object)[edit]
      returns a sentinel indicating the end of a read-only range
      (customization point object)[edit]
      returns a reverse iterator to a range
      (customization point object)[edit]
      returns a reverse end iterator to a range
      (customization point object)[edit]
      returns a reverse iterator to a read-only range
      (customization point object)[edit]
      returns a reverse end iterator to a read-only range
      (customization point object)[edit]
      returns an integer equal to the reserve hint given by a range
      (customization point object)[edit]
      returns an integer equal to the size of a range
      (customization point object)[edit]
      returns a signed integer equal to the size of a range
      (customization point object)[edit]
      checks whether a range is empty
      (customization point object)[edit]
      obtains a pointer to the beginning of a contiguous range
      (customization point object)[edit]
      obtains a pointer to the beginning of a read-only contiguous range
      (customization point object)[edit]

      Enumerations

      Defined in namespacestd::ranges
      specifies whether astd::ranges::subrange modelsstd::ranges::sized_range
      (enum)[edit]

      Helpers

      obtains the size of astd::ranges::subrange
      (class template specialization)[edit]
      obtains the type of the iterator or the sentinel of astd::ranges::subrange
      (class template specialization)[edit]
      obtains iterator or sentinel from astd::ranges::subrange
      (function template)[edit]
      from-range construction tag
      (tag)[edit]

      [edit]Synopsis

      // mostly freestanding#include <compare>#include <initializer_list>#include <iterator> namespace std::ranges{inlinenamespace/* unspecified */{// range accessinlineconstexpr/* unspecified */ begin=/* unspecified */;inlineconstexpr/* unspecified */ end=/* unspecified */;inlineconstexpr/* unspecified */ cbegin=/* unspecified */;inlineconstexpr/* unspecified */ cend=/* unspecified */;inlineconstexpr/* unspecified */ rbegin=/* unspecified */;inlineconstexpr/* unspecified */ rend=/* unspecified */;inlineconstexpr/* unspecified */ crbegin=/* unspecified */;inlineconstexpr/* unspecified */ crend=/* unspecified */; inlineconstexpr/* unspecified */ size=/* unspecified */;inlineconstexpr/* unspecified */ reserve_hint=/* unspecified */;inlineconstexpr/* unspecified */ ssize=/* unspecified */;inlineconstexpr/* unspecified */ empty=/* unspecified */;inlineconstexpr/* unspecified */ data=/* unspecified */;inlineconstexpr/* unspecified */ cdata=/* unspecified */;} // rangestemplate<class T>  concept range=/* see description */; template<class T>constexprbool enable_borrowed_range=false; template<class T>  concept borrowed_range=/* see description */; template<class T>using iterator_t= decltype(ranges::begin(declval<T&>()));template<range R>using sentinel_t= decltype(ranges::end(declval<R&>()));template<range R>using const_iterator_t= decltype(ranges::cbegin(declval<R&>()));template<range R>using const_sentinel_t= decltype(ranges::cend(declval<R&>()));template<range R>using range_difference_t= iter_difference_t<iterator_t<R>>;template<sized_range R>using range_size_t= decltype(ranges::size(declval<R&>()));template<range R>using range_value_t= iter_value_t<iterator_t<R>>;template<range R>using range_reference_t= iter_reference_t<iterator_t<R>>;template<range R>using range_const_reference_t= iter_const_reference_t<iterator_t<R>>;template<range R>using range_rvalue_reference_t= iter_rvalue_reference_t<iterator_t<R>>;template<range R>using range_common_reference_t= iter_common_reference_t<iterator_t<R>>; // sized rangestemplate<class>constexprbool disable_sized_range=false; template<class T>  concept approximately_sized_range=/* see description */; template<class T>  concept sized_range=/* see description */; // viewstemplate<class T>constexprbool enable_view=/* see description */; struct view_base{}; template<class T>  concept view=/* see description */; // other range refinementstemplate<class R,class T>  concept output_range=/* see description */; template<class T>  concept input_range=/* see description */; template<class T>  concept forward_range=/* see description */; template<class T>  concept bidirectional_range=/* see description */; template<class T>  concept random_access_range=/* see description */; template<class T>  concept contiguous_range=/* see description */; template<class T>  concept common_range=/* see description */; template<class T>  concept viewable_range=/* see description */; template<class T>  concept constant_range=/* see description */; // class template view_interfacetemplate<class D>    requires is_class_v<D>&& same_as<D, remove_cv_t<D>>class view_interface; // sub-rangesenumclass subrange_kind:bool{    unsized,    sized}; template<input_or_output_iterator I, sentinel_for<I> S= I, subrange_kind K=/* see description */>    requires(K== subrange_kind::sized||!sized_sentinel_for<S, I>)class subrange; template<class I,class S, subrange_kind K>constexprbool enable_borrowed_range<subrange<I, S, K>>=true; template<size_t N,class I,class S, subrange_kind K>    requires((N==0&& copyable<I>)|| N==1)constexprauto get(const subrange<I, S, K>& r); template<size_t N,class I,class S, subrange_kind K>    requires(N<2)constexprauto get(subrange<I, S, K>&& r);} namespace std{usingranges::get;} namespace std::ranges{// dangling iterator handlingstruct dangling; // class template elements_oftemplate<range R,class Allocator= allocator<byte>>struct elements_of;// hosted template<range R>using borrowed_iterator_t=/* see description */; template<range R>using borrowed_subrange_t=/* see description */; // range conversionstemplate<class C, input_range R,class...Args>    requires(!view<C>)constexpr C to(R&& r, Args&&...args);template<template<class...>class C, input_range R,class...Args>constexprauto to(R&& r, Args&&...args);template<class C,class...Args>    requires(!view<C>)constexprauto to(Args&&...args);template<template<class...>class C,class...Args>constexprauto to(Args&&...args); // empty viewtemplate<class T>    requires is_object_v<T>class empty_view; template<class T>constexprbool enable_borrowed_range<empty_view<T>>=true; namespace views{template<class T>constexpr empty_view<T> empty{};} // single viewtemplate<move_constructible T>    requires is_object_v<T>class single_view; namespace views{inlineconstexpr/* unspecified */ single=/* unspecified */;} template<bool Const,class T>using/*maybe-const*/= conditional_t<Const,const T, T>;// exposition-only // iota viewtemplate<weakly_incrementable W, semiregular Bound= unreachable_sentinel_t>    requires/*weakly-equality-comparable-with*/<W, Bound>&& copyable<W>class iota_view; template<class W,class Bound>constexprbool enable_borrowed_range<iota_view<W, Bound>>=true; namespace views{inlineconstexpr/* unspecified */ iota=/* unspecified */;} // repeat viewtemplate<move_constructible T, semiregular Bound= unreachable_sentinel_t>    requires/* see description */class repeat_view; namespace views{inlineconstexpr/* unspecified */ repeat=/* unspecified */;} // istream viewtemplate<movable Val,class CharT,class Traits= char_traits<CharT>>    requires/* see description */class basic_istream_view;// hostedtemplate<class Val>using istream_view= basic_istream_view<Val,char>;// hostedtemplate<class Val>using wistream_view= basic_istream_view<Val,wchar_t>;// hosted namespace views{template<class T>constexpr/* unspecified */ istream=/* unspecified */;// hosted} // range adaptor objectstemplate<class D>    requires is_class_v<D>&& same_as<D, remove_cv_t<D>>class range_adaptor_closure{}; // all viewnamespace views{inlineconstexpr/* unspecified */ all=/* unspecified */; template<viewable_range R>using all_t= decltype(all(declval<R>()));} // ref viewtemplate<range R>    requires is_object_v<R>class ref_view; template<class T>constexprbool enable_borrowed_range<ref_view<T>>=true; // owning viewtemplate<range R>    requires/* see description */class owning_view; template<class T>constexprbool enable_borrowed_range<owning_view<T>>= enable_borrowed_range<T>; // as rvalue viewtemplate<view V>    requires input_range<V>class as_rvalue_view; template<class T>constexprbool enable_borrowed_range<as_rvalue_view<T>>= enable_borrowed_range<T>; namespace views{inlineconstexpr/* unspecified */ as_rvalue=/* unspecified */;} // filter viewtemplate<input_range V, indirect_unary_predicate<iterator_t<V>> Pred>    requires view<V>&& is_object_v<Pred>class filter_view; namespace views{inlineconstexpr/* unspecified */ filter=/* unspecified */;} // transform viewtemplate<input_range V, move_constructible F>    requires view<V>&& is_object_v<F>&& regular_invocable<F&, range_reference_t<V>>&&/*can-reference*/<invoke_result_t<F&, range_reference_t<V>>>class transform_view; namespace views{inlineconstexpr/* unspecified */ transform=/* unspecified */;} // take viewtemplate<view>class take_view; template<class T>constexprbool enable_borrowed_range<take_view<T>>= enable_borrowed_range<T>; namespace views{inlineconstexpr/* unspecified */ take=/* unspecified */;} // take while viewtemplate<view V,class Pred>    requires input_range<V>&& is_object_v<Pred>&&             indirect_unary_predicate<const Pred, iterator_t<V>>class take_while_view; namespace views{inlineconstexpr/* unspecified */ take_while=/* unspecified */;} // drop viewtemplate<view V>class drop_view; template<class T>constexprbool enable_borrowed_range<drop_view<T>>= enable_borrowed_range<T>; namespace views{inlineconstexpr/* unspecified */ drop=/* unspecified */;} // drop while viewtemplate<view V,class Pred>    requires input_range<V>&& is_object_v<Pred>&&             indirect_unary_predicate<const Pred, iterator_t<V>>class drop_while_view; template<class T,class Pred>constexprbool enable_borrowed_range<drop_while_view<T, Pred>>=    enable_borrowed_range<T>; namespace views{inlineconstexpr/* unspecified */ drop_while=/* unspecified */;} // join viewtemplate<input_range V>    requires view<V>&& input_range<range_reference_t<V>>class join_view; namespace views{inlineconstexpr/* unspecified */ join=/* unspecified */;} // join with viewtemplate<input_range V, forward_range Pattern>    requires/* see description */class join_with_view; namespace views{inlineconstexpr/* unspecified */ join_with=/* unspecified */;} // lazy split viewtemplate<class R>  concept/*tiny-range*/=/* see description */;// exposition-only template<input_range V, forward_range Pattern>    requires view<V>&& view<Pattern>&&             indirectly_comparable<iterator_t<V>,                                   iterator_t<Pattern>,ranges::equal_to>&&(forward_range<V>||/*tiny-range*/<Pattern>)class lazy_split_view; // split viewtemplate<forward_range V, forward_range Pattern>    requires view<V>&& view<Pattern>&&             indirectly_comparable<iterator_t<V>, iterator_t<Pattern>,ranges::equal_to>class split_view; namespace views{inlineconstexpr/* unspecified */ lazy_split=/* unspecified */;inlineconstexpr/* unspecified */ split=/* unspecified */;} // concat viewtemplate<input_range...Views>    requires/* see description */class concat_view; namespace views{inlineconstexpr/* unspecified */ concat=/* unspecified */;} // counted viewnamespace views{inlineconstexpr/* unspecified */ counted=/* unspecified */;} // common viewtemplate<view V>    requires(!common_range<V>&& copyable<iterator_t<V>>)class common_view; template<class T>constexprbool enable_borrowed_range<common_view<T>>= enable_borrowed_range<T>; namespace views{inlineconstexpr/* unspecified */ common=/* unspecified */;} // reverse viewtemplate<view V>    requires bidirectional_range<V>class reverse_view; template<class T>constexprbool enable_borrowed_range<reverse_view<T>>= enable_borrowed_range<T>; namespace views{inlineconstexpr/* unspecified */ reverse=/* unspecified */;} // as const viewtemplate<input_range R>constexprauto&/*possibly-const-range*/(R& r)noexcept{// exposition-onlyifconstexpr(input_range<const R>){returnconst_cast<const R&>(r);}else{return r;}} template<view V>    requires input_range<V>class as_const_view; template<class T>constexprbool enable_borrowed_range<as_const_view<T>>= enable_borrowed_range<T>; namespace views{inlineconstexpr/* unspecified */ as_const=/* unspecified */;} // elements viewtemplate<input_range V, size_t N>    requires/* see description */class elements_view; template<class T, size_t N>constexprbool enable_borrowed_range<elements_view<T, N>>= enable_borrowed_range<T>; template<class R>using keys_view= elements_view<R,0>;template<class R>using values_view= elements_view<R,1>; namespace views{template<size_t N>constexpr/* unspecified */ elements=/* unspecified */;inlineconstexprauto keys= elements<0>;inlineconstexprauto values= elements<1>;} // enumerate viewtemplate<view V>    requires/* see description */class enumerate_view; template<class View>constexprbool enable_borrowed_range<enumerate_view<View>>=    enable_borrowed_range<View>; namespace views{inlineconstexpr/* unspecified */ enumerate=/* unspecified */;} // zip viewtemplate<input_range...Views>    requires(view<Views>&& ...)&&(sizeof...(Views)>0)class zip_view; template<class...Views>constexprbool enable_borrowed_range<zip_view<Views...>>=(enable_borrowed_range<Views>&& ...); namespace views{inlineconstexpr/* unspecified */ zip=/* unspecified */;} // zip transform viewtemplate<move_constructible F, input_range...Views>    requires(view<Views>&& ...)&&(sizeof...(Views)>0)&& is_object_v<F>&&            regular_invocable<F&, range_reference_t<Views>...>&&/*can-reference*/<invoke_result_t<F&, range_reference_t<Views>...>>class zip_transform_view; namespace views{inlineconstexpr/* unspecified */ zip_transform=/* unspecified */;} // adjacent viewtemplate<forward_range V, size_t N>    requires view<V>&&(N>0)class adjacent_view; template<class V, size_t N>constexprbool enable_borrowed_range<adjacent_view<V, N>>= enable_borrowed_range<V>; namespace views{template<size_t N>constexpr/* unspecified */ adjacent=/* unspecified */;inlineconstexprauto pairwise= adjacent<2>;} // adjacent transform viewtemplate<forward_range V, move_constructible F, size_t N>    requires/* see description */class adjacent_transform_view; namespace views{template<size_t N>constexpr/* unspecified */ adjacent_transform=/* unspecified */;inlineconstexprauto pairwise_transform= adjacent_transform<2>;} // chunk viewtemplate<view V>    requires input_range<V>class chunk_view; template<view V>    requires forward_range<V>class chunk_view<V>; template<class V>constexprbool enable_borrowed_range<chunk_view<V>>=    forward_range<V>&& enable_borrowed_range<V>; namespace views{inlineconstexpr/* unspecified */ chunk=/* unspecified */;} // slide viewtemplate<forward_range V>    requires view<V>class slide_view; template<class V>constexprbool enable_borrowed_range<slide_view<V>>= enable_borrowed_range<V>; namespace views{inlineconstexpr/* unspecified */ slide=/* unspecified */;} // chunk by viewtemplate<forward_range V, indirect_binary_predicate<iterator_t<V>, iterator_t<V>> Pred>    requires view<V>&& is_object_v<Pred>class chunk_by_view; namespace views{inlineconstexpr/* unspecified */ chunk_by=/* unspecified */;} // stride viewtemplate<input_range V>    requires view<V>class stride_view; template<class V>constexprbool enable_borrowed_range<stride_view<V>>= enable_borrowed_range<V>; namespace views{inlineconstexpr/* unspecified */ stride=/* unspecified */;} // cartesian product viewtemplate<input_range First, forward_range...Vs>    requires(view<First>&& ...&& view<Vs>)class cartesian_product_view; namespace views{inlineconstexpr/* unspecified */ cartesian_product=/* unspecified */;} // cache latest viewtemplate<input_range V>    requires view<V>class cache_latest_view; namespace views{inlineconstexpr/* unspecified */ cache_latest=/* unspecified */;} // to input viewtemplate<input_range V>    requires view<V>class to_input_view; template<class V>constexprbool enable_borrowed_range<to_input_view<V>>= enable_borrowed_range<V>; namespace views{inlineconstexpr/* unspecified */ to_input=/* unspecified */;}} namespace std{namespace views= ranges::views; template<class T>struct tuple_size;template<size_t I,class T>struct tuple_element; template<class I,class S,ranges::subrange_kind K>struct tuple_size<ranges::subrange<I, S, K>>: integral_constant<size_t,2>{};template<class I,class S,ranges::subrange_kind K>struct tuple_element<0,ranges::subrange<I, S, K>>{using type= I;};template<class I,class S,ranges::subrange_kind K>struct tuple_element<1,ranges::subrange<I, S, K>>{using type= S;};template<class I,class S,ranges::subrange_kind K>struct tuple_element<0,constranges::subrange<I, S, K>>{using type= I;};template<class I,class S,ranges::subrange_kind K>struct tuple_element<1,constranges::subrange<I, S, K>>{using type= S;}; struct from_range_t{explicit from_range_t()=default;};inlineconstexpr from_range_t from_range{};}

      [edit]Conceptrange

      namespace std::ranges{template<class T>  concept range= requires(T& t){ranges::begin(t);// sometimes equality-preserving (see description)ranges::end(t);};}

      [edit]Conceptborrowed_range

      namespace std::ranges{template<class T>  concept borrowed_range=    range<T>&&(is_lvalue_reference_v<T>|| enable_borrowed_range<remove_cvref_t<T>>);}

      [edit]Conceptapproximately_sized_range

      namespace std::ranges{template<class T>  concept approximately_sized_range= range<T>&& requires(T& t){    ranges::reserve_hint(t);};}

      [edit]Conceptsized_range

      namespace std::ranges{template<class T>  concept sized_range= approximately_sized_range<T>&& requires(T& t){ranges::size(t);};}

      [edit]Conceptview

      namespace std::ranges{template<class T>constexprbool/*is-derived-from-view-interface*/=/* see description */;// exposition-onlytemplate<class T>constexprbool enable_view=    derived_from<T, view_base>||/*is-derived-from-view-interface*/<T>; template<class T>  concept view= range<T>&& movable<T>&& enable_view<T>;}

      [edit]Conceptoutput_range

      namespace std::ranges{template<class R,class T>  concept output_range= range<R>&& output_iterator<iterator_t<R>, T>;}

      [edit]Conceptinput_range

      namespace std::ranges{template<class T>  concept input_range= range<T>&& input_iterator<iterator_t<T>>;}

      [edit]Conceptforward_range

      namespace std::ranges{template<class T>  concept forward_range= input_range<T>&& forward_iterator<iterator_t<T>>;}

      [edit]Conceptbidirectional_range

      namespace std::ranges{template<class T>  concept bidirectional_range= forward_range<T>&& bidirectional_iterator<iterator_t<T>>;}

      [edit]Conceptrandom_access_range

      namespace std::ranges{template<class T>  concept random_access_range=    bidirectional_range<T>&& random_access_iterator<iterator_t<T>>;}

      [edit]Conceptcontiguous_range

      namespace std::ranges{template<class T>  concept contiguous_range=    random_access_range<T>&& contiguous_iterator<iterator_t<T>>&& requires(T& t){{ranges::data(t)}-> same_as<add_pointer_t<range_reference_t<T>>>;};}

      [edit]Conceptcommon_range

      namespace std::ranges{template<class T>  concept common_range= range<T>&& same_as<iterator_t<T>, sentinel_t<T>>;}

      [edit]Conceptviewable_range

      namespace std::ranges{template<class T>  concept viewable_range=    range<T>&&((view<remove_cvref_t<T>>&& constructible_from<remove_cvref_t<T>, T>)||(!view<remove_cvref_t<T>>&&(is_lvalue_reference_v<T>||(movable<remove_reference_t<T>>&&!/*is-initializer-list*/<T>))));}

      [edit]Conceptconstant_range

      namespace std::ranges{template<class T>  concept constant_range= input_range<T>&&/*constant-iterator*/<iterator_t<T>>;}

      [edit]Helper concepts

      Note: The concepts in this section are only for exposition and are not part of the interface.

      namespace std::ranges{// unspecified, for name lookup onlytemplate<class R>  concept/*simple-view*/=// exposition-only    view<R>&& range<const R>&& same_as<iterator_t<R>, iterator_t<const R>>&&    same_as<sentinel_t<R>, sentinel_t<const R>>; template<class I>  concept/*has-arrow*/=// exposition-only    input_iterator<I>&&(is_pointer_v<I>|| requires(const I i){ i.operator->();}); template<class T,class U>  concept/*different-from*/=// exposition-only!same_as<remove_cvref_t<T>, remove_cvref_t<U>>; template<class R>  concept/*range-with-movable-references*/=// exposition-only    input_range<R>&& move_constructible<range_reference_t<R>>&&    move_constructible<range_rvalue_reference_t<R>>; template<class R>constexprbool/*is-initializer-list*/=/* see description */;// exposition-only template<class T>constexprauto/*as-const-pointer*/(const T* p)noexcept{return p;}// exposition-only}

      [edit]Class templatestd::ranges::view_interface

      namespace std::ranges{template<class D>    requires is_class_v<D>&& same_as<D, remove_cv_t<D>>class view_interface{private:constexpr D&/*derived*/()noexcept{// exposition-onlyreturnstatic_cast<D&>(*this);}constexprconst D&/*derived*/()constnoexcept{// exposition-onlyreturnstatic_cast<const D&>(*this);} public:constexprbool empty()      requires sized_range<D>|| forward_range<D>{ifconstexpr(sized_range<D>)returnranges::size(/*derived*/())==0;elsereturnranges::begin(/*derived*/())==ranges::end(/*derived*/());}constexprbool empty()const      requires sized_range<const D>|| forward_range<const D>{ifconstexpr(sized_range<const D>)returnranges::size(/*derived*/())==0;elsereturnranges::begin(/*derived*/())==ranges::end(/*derived*/());} constexprauto cbegin()      requires input_range<D>{returnranges::cbegin(/*derived*/());}constexprauto cbegin()const      requires input_range<const D>{returnranges::cbegin(/*derived*/());}constexprauto cend()      requires input_range<D>{returnranges::cend(/*derived*/());}constexprauto cend()const      requires input_range<const D>{returnranges::cend(/*derived*/());} constexprexplicit operatorbool()      requires requires{ranges::empty(/*derived*/());}{return!ranges::empty(/*derived*/());}constexprexplicit operatorbool()const      requires requires{ranges::empty(/*derived*/());}{return!ranges::empty(/*derived*/());} constexprauto data()      requires contiguous_iterator<iterator_t<D>>{return to_address(ranges::begin(/*derived*/()));}constexprauto data()const      requires range<const D>&& contiguous_iterator<iterator_t<const D>>{return to_address(ranges::begin(/*derived*/()));} constexprauto size()      requires forward_range<D>&& sized_sentinel_for<sentinel_t<D>, iterator_t<D>>{return/*to-unsigned-like*/(ranges::end(/*derived*/())-ranges::begin(/*derived*/()));}constexprauto size()const      requires forward_range<const D>&&               sized_sentinel_for<sentinel_t<const D>, iterator_t<const D>>{return/*to-unsigned-like*/(ranges::end(/*derived*/())-ranges::begin(/*derived*/()));} constexpr decltype(auto) front()      requires forward_range<D>;constexpr decltype(auto) front()const      requires forward_range<const D>; constexpr decltype(auto) back()      requires bidirectional_range<D>&& common_range<D>;constexpr decltype(auto) back()const      requires bidirectional_range<const D>&& common_range<const D>; template<random_access_range R= D>constexpr decltype(auto) operator[](range_difference_t<R> n){returnranges::begin(/*derived*/())[n];}template<random_access_range R=const D>constexpr decltype(auto) operator[](range_difference_t<R> n)const{returnranges::begin(/*derived*/())[n];}};}

      [edit]Class templatestd::ranges::subrange

      namespace std::ranges{template<class From,class To>  concept/*uses-nonqualification-pointer-conversion*/=// exposition-only    is_pointer_v<From>&& is_pointer_v<To>&&!convertible_to<remove_pointer_t<From>(*)[], remove_pointer_t<To>(*)[]>; template<class From,class To>  concept/*convertible-to-non-slicing*/=// exposition-only    convertible_to<From, To>&&!/*uses-nonqualification-pointer-conversion*/<decay_t<From>, decay_t<To>>; template<class T,class U,class V>  concept/*pair-like-convertible-from*/=// exposition-only!range<T>&&!is_reference_v<T>&&/*pair-like*/<T>&& constructible_from<T, U, V>&&/*convertible-to-non-slicing*/<U, tuple_element_t<0, T>>&&    convertible_to<V, tuple_element_t<1, T>>; template<input_or_output_iterator I,           sentinel_for<I> S= I,           subrange_kind K=             sized_sentinel_for<S, I>? subrange_kind::sized: subrange_kind::unsized>    requires(K== subrange_kind::sized||!sized_sentinel_for<S, I>)class subrange:public view_interface<subrange<I, S, K>>{private:staticconstexprbool/*StoreSize*/=// exposition-only      K== subrange_kind::sized&&!sized_sentinel_for<S, I>;    I/*begin_*/= I();// exposition-only    S/*end_*/= S();// exposition-only/*make-unsigned-like-t*/<iter_difference_t<I>>/*size_*/=0;// exposition-only present only// if StoreSize is truepublic:    subrange()      requires default_initializable<I>=default; constexpr subrange(/*convertible-to-non-slicing*/<I>auto i, S s)      requires(!/*StoreSize*/); constexpr subrange(/*convertible-to-non-slicing*/<I>auto i,                       S s,/*make-unsigned-like-t*/<iter_difference_t<I>> n)      requires(K== subrange_kind::sized); template</*different-from*/<subrange> R>      requires borrowed_range<R>&&/*convertible-to-non-slicing*/<iterator_t<R>, I>&&               convertible_to<sentinel_t<R>, S>constexpr subrange(R&& r)                 requires(!/*StoreSize*/|| sized_range<R>); template<borrowed_range R>      requires/*convertible-to-non-slicing*/<iterator_t<R>, I>&&               convertible_to<sentinel_t<R>, S>constexpr subrange(R&& r,/*make-unsigned-like-t*/<iter_difference_t<I>> n)                 requires(K== subrange_kind::sized): subrange{ranges::begin(r),ranges::end(r), n}{} template</*different-from*/<subrange> PairLike>      requires/*pair-like-convertible-from*/<PairLike,const I&,const S&>constexpr operator PairLike()const; constexpr I begin()const      requires copyable<I>;constexpr I begin()      requires(!copyable<I>);constexpr S end()const; constexprbool empty()const;constexpr/*make-unsigned-like-t*/<iter_difference_t<I>> size()const      requires(K== subrange_kind::sized); constexpr subrange next(iter_difference_t<I> n=1)const&      requires forward_iterator<I>;constexpr subrange next(iter_difference_t<I> n=1)&&;constexpr subrange prev(iter_difference_t<I> n=1)const      requires bidirectional_iterator<I>;constexpr subrange& advance(iter_difference_t<I> n);}; template<input_or_output_iterator I, sentinel_for<I> S>  subrange(I, S)-> subrange<I, S>; template<input_or_output_iterator I, sentinel_for<I> S>  subrange(I, S,/*make-unsigned-like-t*/<iter_difference_t<I>>)-> subrange<I, S, subrange_kind::sized>; template<borrowed_range R>  subrange(R&&)-> subrange<iterator_t<R>,                sentinel_t<R>,(sized_range<R>|| sized_sentinel_for<sentinel_t<R>, iterator_t<R>>)? subrange_kind::sized: subrange_kind::unsized>; template<borrowed_range R>  subrange(R&&,/*make-unsigned-like-t*/<range_difference_t<R>>)-> subrange<iterator_t<R>, sentinel_t<R>, subrange_kind::sized>;}

      [edit]Classstd::ranges::dangling

      namespace std::ranges{struct dangling{constexpr dangling()noexcept=default;constexpr dangling(auto&&...)noexcept{}};}

      [edit]Classstd::ranges::elements_of

      namespace std::ranges{template<range R,class Allocator= allocator<byte>>struct elements_of{[[no_unique_address]] R range;[[no_unique_address]] Allocator allocator= Allocator();}; template<class R,class Allocator= allocator<byte>>  elements_of(R&&, Allocator= Allocator())-> elements_of<R&&, Allocator>;}

      [edit]Class templatestd::ranges::empty_view

      namespace std::ranges{template<class T>    requires is_object_v<T>class empty_view:public view_interface<empty_view<T>>{public:staticconstexpr T* begin()noexcept{return nullptr;}staticconstexpr T* end()noexcept{return nullptr;}staticconstexpr T* data()noexcept{return nullptr;}staticconstexpr size_t size()noexcept{return0;}staticconstexprbool empty()noexcept{returntrue;}};}

      [edit]Class templatestd::ranges::single_view

      namespace std::ranges{template<move_constructible T>    requires is_object_v<T>class single_view:public view_interface<single_view<T>>{private:/*movable-box*/<T>/*value_*/;// exposition-only public:    single_view()      requires default_initializable<T>=default;constexprexplicit single_view(const T& t)      requires copy_constructible<T>;constexprexplicit single_view(T&& t);template<class...Args>      requires constructible_from<T, Args...>constexprexplicit single_view(in_place_t, Args&&...args); constexpr T* begin()noexcept;constexprconst T* begin()constnoexcept;constexpr T* end()noexcept;constexprconst T* end()constnoexcept;staticconstexprbool empty()noexcept;staticconstexpr size_t size()noexcept;constexpr T* data()noexcept;constexprconst T* data()constnoexcept;}; template<class T>  single_view(T)-> single_view<T>;}

      [edit]Class templatestd::ranges::iota_view

      namespace std::ranges{template<class I>  concept/*decrementable*/=/* see description */;// exposition-only template<class I>  concept/*advanceable*/=/* see description */;// exposition-only template<weakly_incrementable W, semiregular Bound= unreachable_sentinel_t>    requires/*weakly-equality-comparable-with*/<W, Bound>&& copyable<W>class iota_view:public view_interface<iota_view<W, Bound>>{private:// class iota_view::iteratorstruct/*iterator*/;// exposition-only // class iota_view::sentinelstruct/*sentinel*/;// exposition-only     W/*value_*/= W();// exposition-only    Bound/*bound_*/= Bound();// exposition-only public:    iota_view()      requires default_initializable<W>=default;constexprexplicit iota_view(W value);constexprexplicit iota_view(type_identity_t<W> value, type_identity_t<Bound> bound);constexprexplicit iota_view(/*iterator*/ first,/* see description */ last); constexpr/*iterator*/ begin()const;constexprauto end()const;constexpr/*iterator*/ end()const      requires same_as<W, Bound>; constexprbool empty()const;constexprauto size()const      requires/* see description */;}; template<class W,class Bound>    requires(!/*is-integer-like*/<W>||!/*is-integer-like*/<Bound>||(/*is-signed-integer-like*/<W>==/*is-signed-integer-like*/<Bound>))  iota_view(W, Bound)-> iota_view<W, Bound>;}

      [edit]Class templatestd::ranges::iota_view::iterator

      namespace std::ranges{template<weakly_incrementable W, semiregular Bound>    requires/*weakly-equality-comparable-with*/<W, Bound>&& copyable<W>struct iota_view<W, Bound>::/*iterator*/{private:    W/*value_*/= W();// exposition-only public:using iterator_concept=/* see description */;using iterator_category=      input_iterator_tag;// present only if W models incrementable and// IOTA-DIFF-T(W) is an integral typeusing value_type= W;using difference_type=/*IOTA-DIFF-T*/(W); /*iterator*/()      requires default_initializable<W>=default;constexprexplicit/*iterator*/(W value); constexpr W operator*()constnoexcept(is_nothrow_copy_constructible_v<W>); constexpr/*iterator*/& operator++();constexprvoid operator++(int);constexpr/*iterator*/ operator++(int)      requires incrementable<W>; constexpr/*iterator*/& operator--()      requires/*decrementable*/<W>;constexpr/*iterator*/ operator--(int)      requires/*decrementable*/<W>; constexpr/*iterator*/& operator+=(difference_type n)      requires/*advanceable*/<W>;constexpr/*iterator*/& operator-=(difference_type n)      requires/*advanceable*/<W>;constexpr W operator[](difference_type n)const      requires/*advanceable*/<W>; friendconstexprbool operator==(const/*iterator*/& x,const/*iterator*/& y)      requires equality_comparable<W>; friendconstexprbool operator<(const/*iterator*/& x,const/*iterator*/& y)      requires totally_ordered<W>;friendconstexprbool operator>(const/*iterator*/& x,const/*iterator*/& y)      requires totally_ordered<W>;friendconstexprbool operator<=(const/*iterator*/& x,const/*iterator*/& y)      requires totally_ordered<W>;friendconstexprbool operator>=(const/*iterator*/& x,const/*iterator*/& y)      requires totally_ordered<W>;friendconstexprauto operator<=>(const/*iterator*/& x,const/*iterator*/& y)      requires totally_ordered<W>&& three_way_comparable<W>; friendconstexpr/*iterator*/ operator+(/*iterator*/ i, difference_type n)      requires/*advanceable*/<W>;friendconstexpr/*iterator*/ operator+(difference_type n,/*iterator*/ i)      requires/*advanceable*/<W>; friendconstexpr/*iterator*/ operator-(/*iterator*/ i, difference_type n)      requires/*advanceable*/<W>;friendconstexpr difference_type operator-(const/*iterator*/& x,const/*iterator*/& y)      requires/*advanceable*/<W>;};}

      [edit]Class templatestd::ranges::iota_view::sentinel

      namespace std::ranges{template<weakly_incrementable W, semiregular Bound>    requires/*weakly-equality-comparable-with*/<W, Bound>&& copyable<W>struct iota_view<W, Bound>::/*sentinel*/{private:    Bound/*bound_*/= Bound();// exposition-only public:/*sentinel*/()=default;constexprexplicit/*sentinel*/(Bound bound); friendconstexprbool operator==(const/*iterator*/& x,const/*sentinel*/& y); friendconstexpr iter_difference_t<W> operator-(const/*iterator*/& x,const/*sentinel*/& y)      requires sized_sentinel_for<Bound, W>;friendconstexpr iter_difference_t<W> operator-(const/*sentinel*/& x,const/*iterator*/& y)      requires sized_sentinel_for<Bound, W>;};}

      [edit]Class templatestd::ranges::repeat_view

      namespace std::ranges{template<class T>  concept/*integer-like-with-usable-difference-type*/=// exposition-only/*is-signed-integer-like*/<T>||(/*is-integer-like*/<T>&& weakly_incrementable<T>); template<move_constructible T, semiregular Bound= unreachable_sentinel_t>    requires(is_object_v<T>&& same_as<T, remove_cv_t<T>>&&(/*integer-like-with-usable-difference-type*/<Bound>||              same_as<Bound, unreachable_sentinel_t>))class repeat_view:public view_interface<repeat_view<T, Bound>>{private:// class repeat_view::iteratorstruct/*iterator*/;// exposition-only /*movable-box*/<T>/*value_*/;// exposition-only    Bound/*bound_*/= Bound();// exposition-only public:    repeat_view()      requires default_initializable<T>=default; constexprexplicit repeat_view(const T& value, Bound bound= Bound())      requires copy_constructible<T>;constexprexplicit repeat_view(T&& value, Bound bound= Bound());template<class...TArgs,class...BoundArgs>      requires constructible_from<T, TArgs...>&& constructible_from<Bound, BoundArgs...>constexprexplicit repeat_view(piecewise_construct_t,                                   tuple<TArgs...> value_args,                                   tuple<BoundArgs...> bound_args= tuple<>{}); constexpr/*iterator*/ begin()const;constexpr/*iterator*/ end()const      requires(!same_as<Bound, unreachable_sentinel_t>);constexpr unreachable_sentinel_t end()constnoexcept; constexprauto size()const      requires(!same_as<Bound, unreachable_sentinel_t>);}; template<class T,class Bound= unreachable_sentinel_t>  repeat_view(T, Bound= Bound())-> repeat_view<T, Bound>;}

      [edit]Class templatestd::ranges::repeat_view::iterator

      namespace std::ranges{template<move_constructible T, semiregular Bound>    requires(is_object_v<T>&& same_as<T, remove_cv_t<T>>&&(/*integer-like-with-usable-difference-type*/<Bound>||              same_as<Bound, unreachable_sentinel_t>))class repeat_view<T, Bound>::/*iterator*/{private:using/*index-type*/=// exposition-only      conditional_t<same_as<Bound, unreachable_sentinel_t>, ptrdiff_t, Bound>;const T*/*value_*/= nullptr;// exposition-only/*index-type*//*current_*/=/*index-type*/();// exposition-only constexprexplicit/*iterator*/(const T* value,/*index-type*/ b=/*index-type*/());// exposition-only public:using iterator_concept= random_access_iterator_tag;using iterator_category= random_access_iterator_tag;using value_type= T;using difference_type=/* see description */; /*iterator*/()=default; constexprconst T& operator*()constnoexcept; constexpr/*iterator*/& operator++();constexpr/*iterator*/ operator++(int); constexpr/*iterator*/& operator--();constexpr/*iterator*/ operator--(int); constexpr/*iterator*/& operator+=(difference_type n);constexpr/*iterator*/& operator-=(difference_type n);constexprconst T& operator[](difference_type n)constnoexcept; friendconstexprbool operator==(const/*iterator*/& x,const/*iterator*/& y);friendconstexprauto operator<=>(const/*iterator*/& x,const/*iterator*/& y); friendconstexpr/*iterator*/ operator+(/*iterator*/ i, difference_type n);friendconstexpr/*iterator*/ operator+(difference_type n,/*iterator*/ i); friendconstexpr/*iterator*/ operator-(/*iterator*/ i, difference_type n);friendconstexpr difference_type operator-(const/*iterator*/& x,const/*iterator*/& y);};}

      [edit]Class templatestd::ranges::basic_istream_view

      namespace std::ranges{template<class Val,class CharT,class Traits>  concept/*stream-extractable*/=// exposition-only    requires(basic_istream<CharT, Traits>& is, Val& t){ is>> t;}; template<movable Val,class CharT,class Traits= char_traits<CharT>>    requires default_initializable<Val>&&/*stream-extractable*/<Val, CharT, Traits>class basic_istream_view:public view_interface<basic_istream_view<Val, CharT, Traits>>{public:constexprexplicit basic_istream_view(basic_istream<CharT, Traits>& stream); constexprauto begin(){*/*stream_*/>>/*value_*/;return/*iterator*/{*this};} constexpr default_sentinel_t end()constnoexcept; private:// class basic_istream_view::iteratorstruct/*iterator*/;// exposition-only    basic_istream<CharT, Traits>*/*stream_*/;// exposition-only    Val/*value_*/= Val();// exposition-only};}

      [edit]Class templatestd::ranges::basic_istream_view::iterator

      namespace std::ranges{template<movable Val,class CharT,class Traits>    requires default_initializable<Val>&&/*stream-extractable*/<Val, CharT, Traits>class basic_istream_view<Val, CharT, Traits>::/*iterator*/{public:using iterator_concept= input_iterator_tag;using difference_type= ptrdiff_t;using value_type= Val; constexprexplicit/*iterator*/(basic_istream_view& parent)noexcept; /*iterator*/(const/*iterator*/&)= delete;/*iterator*/(/*iterator*/&&)=default; /*iterator*/& operator=(const/*iterator*/&)= delete;/*iterator*/& operator=(/*iterator*/&&)=default; /*iterator*/& operator++();void operator++(int);     Val& operator*()const; friendbool operator==(const/*iterator*/& x, default_sentinel_t); private:    basic_istream_view*/*parent_*/;// exposition-only};}

      [edit]Class templatestd::ranges::ref_view

      namespace std::ranges{template<range R>    requires is_object_v<R>class ref_view:public view_interface<ref_view<R>>{private:    R*/*r_*/;// exposition-only public:template</*different-from*/<ref_view> T>      requires/* see description */constexpr    ref_view(T&& t); constexpr R& base()const{return*/*r_*/;} constexpr iterator_t<R> begin()const{returnranges::begin(*/*r_*/);}constexpr sentinel_t<R> end()const{returnranges::end(*/*r_*/);} constexprbool empty()const      requires requires{ranges::empty(*/*r_*/);}{returnranges::empty(*/*r_*/);} constexprauto size()const      requires sized_range<R>{returnranges::size(*/*r_*/);} constexprauto reserve_hint()const      requires approximately_sized_range<R>{return ranges::reserve_hint(*/*r_*/);} constexprauto data()const      requires contiguous_range<R>{returnranges::data(*/*r_*/);}}; template<class R>  ref_view(R&)-> ref_view<R>;}

      [edit]Class templatestd::ranges::owning_view

      namespace std::ranges{template<range R>    requires movable<R>&&(!/*is-initializer-list*/<R>)class owning_view:public view_interface<owning_view<R>>{private:    R/*r_*/= R();// exposition-only public:    owning_view()      requires default_initializable<R>=default;constexpr owning_view(R&& t);     owning_view(owning_view&&)=default;    owning_view& operator=(owning_view&&)=default; constexpr R& base()&noexcept{return/*r_*/;}constexprconst R& base()const&noexcept{return/*r_*/;}constexpr R&& base()&&noexcept{return std::move(/*r_*/);}constexprconst R&& base()const&&noexcept{return std::move(/*r_*/);} constexpr iterator_t<R> begin(){returnranges::begin(/*r_*/);}constexpr sentinel_t<R> end(){returnranges::end(/*r_*/);} constexprauto begin()const      requires range<const R>{returnranges::begin(/*r_*/);}constexprauto end()const      requires range<const R>{returnranges::end(/*r_*/);} constexprbool empty()      requires requires{ranges::empty(/*r_*/);}{returnranges::empty(/*r_*/);}constexprbool empty()const      requires requires{ranges::empty(/*r_*/);}{returnranges::empty(/*r_*/);} constexprauto size()      requires sized_range<R>{returnranges::size(/*r_*/);}constexprauto size()const      requires sized_range<const R>{returnranges::size(/*r_*/);} constexprauto reserve_hint()      requires approximately_sized_range<R>{return ranges::reserve_hint(/*r_*/);}constexprauto reserve_hint()const      requires approximately_sized_range<const R>{return ranges::reserve_hint(/*r_*/);} constexprauto data()      requires contiguous_range<R>{returnranges::data(/*r_*/);}constexprauto data()const      requires contiguous_range<const R>{returnranges::data(/*r_*/);}};}

      [edit]Class templatestd::ranges::as_rvalue_view

      namespace std::ranges{template<view V>    requires input_range<V>class as_rvalue_view:public view_interface<as_rvalue_view<V>>{    V/*base_*/= V();// exposition-only public:    as_rvalue_view()      requires default_initializable<V>=default;constexprexplicit as_rvalue_view(V base); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexprauto begin()      requires(!/*simple-view*/<V>){return move_iterator(ranges::begin(/*base_*/));}constexprauto begin()const      requires range<const V>{return move_iterator(ranges::begin(/*base_*/));} constexprauto end()      requires(!/*simple-view*/<V>){ifconstexpr(common_range<V>){return move_iterator(ranges::end(/*base_*/));}else{return move_sentinel(ranges::end(/*base_*/));}}constexprauto end()const      requires range<const V>{ifconstexpr(common_range<const V>){return move_iterator(ranges::end(/*base_*/));}else{return move_sentinel(ranges::end(/*base_*/));}} constexprauto size()      requires sized_range<V>{returnranges::size(/*base_*/);}constexprauto size()const      requires sized_range<const V>{returnranges::size(/*base_*/);} constexprauto reserve_hint()      requires approximately_sized_range<V>{return ranges::reserve_hint(/*base_*/);}constexprauto reserve_hint()const      requires approximately_sized_range<const V>{return ranges::reserve_hint(/*base_*/);}}; template<class R>  as_rvalue_view(R&&)-> as_rvalue_view<views::all_t<R>>;}

      [edit]Class templatestd::ranges::filter_view

      namespace std::ranges{template<input_range V, indirect_unary_predicate<iterator_t<V>> Pred>    requires view<V>&& is_object_v<Pred>class filter_view:public view_interface<filter_view<V, Pred>>{private:    V/*base_*/= V();// exposition-only/*movable-box*/<Pred>/*pred_*/;// exposition-only // class filter_view::iteratorclass/*iterator*/;// exposition-only // class filter_view::sentinelclass/*sentinel*/;// exposition-only public:    filter_view()      requires default_initializable<V>&& default_initializable<Pred>=default;constexprexplicit filter_view(V base, Pred pred); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexprconst Pred& pred()const; constexpr/*iterator*/ begin();constexprauto end(){ifconstexpr(common_range<V>)return/*iterator*/{*this,ranges::end(/*base_*/)};elsereturn/*sentinel*/{*this};}}; template<class R,class Pred>  filter_view(R&&, Pred)-> filter_view<views::all_t<R>, Pred>;}

      [edit]Class templatestd::ranges::filter_view::iterator

      namespace std::ranges{template<input_range V, indirect_unary_predicate<iterator_t<V>> Pred>    requires view<V>&& is_object_v<Pred>class filter_view<V, Pred>::/*iterator*/{private:    iterator_t<V>/*current_*/= iterator_t<V>();// exposition-only    filter_view*/*parent_*/= nullptr;// exposition-only public:using iterator_concept=/* see description */;using iterator_category=/* see description */;// not always presentusing value_type= range_value_t<V>;using difference_type= range_difference_t<V>; /*iterator*/()      requires default_initializable<iterator_t<V>>=default;constexpr/*iterator*/(filter_view& parent, iterator_t<V> current); constexprconst iterator_t<V>& base()const&noexcept;constexpr iterator_t<V> base()&&;constexpr range_reference_t<V> operator*()const;constexpr iterator_t<V> operator->()const      requires/*has-arrow*/<iterator_t<V>>&& copyable<iterator_t<V>>; constexpr/*iterator*/& operator++();constexprvoid operator++(int);constexpr/*iterator*/ operator++(int)      requires forward_range<V>; constexpr/*iterator*/& operator--()      requires bidirectional_range<V>;constexpr/*iterator*/ operator--(int)      requires bidirectional_range<V>; friendconstexprbool operator==(const/*iterator*/& x,const/*iterator*/& y)      requires equality_comparable<iterator_t<V>>; friendconstexpr range_rvalue_reference_t<V> iter_move(const/*iterator*/& i)noexcept(noexcept(ranges::iter_move(i./*current_*/))); friendconstexprvoid iter_swap(const/*iterator*/& x,const/*iterator*/& y)noexcept(noexcept(ranges::iter_swap(x./*current_*/,                                                                 y./*current_*/)))      requires indirectly_swappable<iterator_t<V>>;};}

      [edit]Class templatestd::ranges::filter_view::sentinel

      namespace std::ranges{template<input_range V, indirect_unary_predicate<iterator_t<V>> Pred>    requires view<V>&& is_object_v<Pred>class filter_view<V, Pred>::/*sentinel*/{private:    sentinel_t<V>/*end_*/= sentinel_t<V>();// exposition-only public:/*sentinel*/()=default;constexprexplicit/*sentinel*/(filter_view& parent); constexpr sentinel_t<V> base()const; friendconstexprbool operator==(const/*iterator*/& x,const/*sentinel*/& y);};}

      [edit]Class templatestd::ranges::transform_view

      namespace std::ranges{template<input_range V, move_constructible F>    requires view<V>&& is_object_v<F>&& regular_invocable<F&, range_reference_t<V>>&&/*can-reference*/<invoke_result_t<F&, range_reference_t<V>>>class transform_view:public view_interface<transform_view<V, F>>{private:// class template transform_view::iteratortemplate<bool>struct/*iterator*/;// exposition-only // class template transform_view::sentineltemplate<bool>struct/*sentinel*/;// exposition-only     V/*base_*/= V();// exposition-only/*movable-box*/<F>/*fun_*/;// exposition-only public:    transform_view()      requires default_initializable<V>&& default_initializable<F>=default;constexprexplicit transform_view(V base, F fun); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexpr/*iterator*/<false> begin();constexpr/*iterator*/<true> begin()const      requires range<const V>&& regular_invocable<const F&, range_reference_t<const V>>; constexpr/*sentinel*/<false> end();constexpr/*iterator*/<false> end()      requires common_range<V>;constexpr/*sentinel*/<true> end()const      requires range<const V>&& regular_invocable<const F&, range_reference_t<const V>>;constexpr/*iterator*/<true> end()const      requires common_range<const V>&&               regular_invocable<const F&, range_reference_t<const V>>; constexprauto size()      requires sized_range<V>{returnranges::size(/*base_*/);}constexprauto size()const      requires sized_range<const V>{returnranges::size(/*base_*/);} constexprauto reserve_hint()      requires approximately_sized_range<V>{return ranges::reserve_hint(/*base_*/);}constexprauto reserve_hint()const      requires approximately_sized_range<const V>{return ranges::reserve_hint(/*base_*/);}}; template<class R,class F>  transform_view(R&&, F)-> transform_view<views::all_t<R>, F>;}

      [edit]Class templatestd::ranges::transform_view::iterator

      namespace std::ranges{template<input_range V, move_constructible F>    requires view<V>&& is_object_v<F>&& regular_invocable<F&, range_reference_t<V>>&&/*can-reference*/<invoke_result_t<F&, range_reference_t<V>>>template<bool Const>class transform_view<V, F>::/*iterator*/{private:using/*Parent*/=/*maybe-const*/<Const, transform_view>;// exposition-onlyusing/*Base*/=/*maybe-const*/<Const, V>;// exposition-only    iterator_t</*Base*/>/*current_*/= iterator_t</*Base*/>();// exposition-only/*Parent*/*/*parent_*/= nullptr;// exposition-only public:using iterator_concept=/* see description */;using iterator_category=/* see description */;// not always presentusing value_type= remove_cvref_t<      invoke_result_t</*maybe-const*/<Const, F>&, range_reference_t</*Base*/>>>;using difference_type= range_difference_t</*Base*/>; /*iterator*/()      requires default_initializable<iterator_t</*Base*/>>=default;constexpr/*iterator*/(/*Parent*/& parent, iterator_t</*Base*/> current);constexpr/*iterator*/(/*iterator*/<!Const> i)      requires Const&& convertible_to<iterator_t<V>, iterator_t</*Base*/>>; constexprconst iterator_t</*Base*/>& base()const&noexcept;constexpr iterator_t</*Base*/> base()&&; constexpr decltype(auto) operator*()constnoexcept(noexcept(invoke(*/*parent_*/->/*fun_*/,*/*current_*/))){return invoke(*/*parent_*/->/*fun_*/,*/*current_*/);} constexpr/*iterator*/& operator++();constexprvoid operator++(int);constexpr/*iterator*/ operator++(int)      requires forward_range</*Base*/>; constexpr/*iterator*/& operator--()      requires bidirectional_range</*Base*/>;constexpr/*iterator*/ operator--(int)      requires bidirectional_range</*Base*/>; constexpr/*iterator*/& operator+=(difference_type n)      requires random_access_range</*Base*/>;constexpr/*iterator*/& operator-=(difference_type n)      requires random_access_range</*Base*/>; constexpr decltype(auto) operator[](difference_type n)const      requires random_access_range</*Base*/>{return invoke(*/*parent_*/->/*fun_*/,/*current_*/[n]);} friendconstexprbool operator==(const/*iterator*/& x,const/*iterator*/& y)      requires equality_comparable<iterator_t</*Base*/>>; friendconstexprbool operator<(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprbool operator>(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprbool operator<=(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprbool operator>=(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprauto operator<=>(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>&& three_way_comparable<iterator_t</*Base*/>>; friendconstexpr/*iterator*/ operator+(/*iterator*/ i, difference_type n)      requires random_access_range</*Base*/>;friendconstexpr/*iterator*/ operator+(difference_type n,/*iterator*/ i)      requires random_access_range</*Base*/>; friendconstexpr/*iterator*/ operator-(/*iterator*/ i, difference_type n)      requires random_access_range</*Base*/>;friendconstexpr difference_type operator-(const/*iterator*/& x,const/*iterator*/& y)      requires sized_sentinel_for<iterator_t</*Base*/>, iterator_t</*Base*/>>;};}

      [edit]Class templatestd::ranges::transform_view::sentinel

      namespace std::ranges{template<input_range V, move_constructible F>    requires view<V>&& is_object_v<F>&& regular_invocable<F&, range_reference_t<V>>&&/*can-reference*/<invoke_result_t<F&, range_reference_t<V>>>template<bool Const>class transform_view<V, F>::/*sentinel*/{private:using/*Parent*/=/*maybe-const*/<Const, transform_view>;// exposition-onlyusing/*Base*/=/*maybe-const*/<Const, V>;// exposition-only    sentinel_t</*Base*/>/*end_*/= sentinel_t</*Base*/>();// exposition-only public:/*sentinel*/()=default;constexprexplicit/*sentinel*/(sentinel_t</*Base*/> end);constexpr/*sentinel*/(/*sentinel*/<!Const> i)      requires Const&& convertible_to<sentinel_t<V>, sentinel_t</*Base*/>>; constexpr sentinel_t</*Base*/> base()const; template<bool OtherConst>      requires sentinel_for<sentinel_t</*Base*/>,                            iterator_t</*maybe-const*/<OtherConst, V>>>friendconstexprbool operator==(const/*iterator*/<OtherConst>& x,const/*sentinel*/& y); template<bool OtherConst>      requires sized_sentinel_for<sentinel_t</*Base*/>,                                  iterator_t</*maybe-const*/<OtherConst, V>>>friendconstexpr range_difference_t</*maybe-const*/<OtherConst, V>> operator-(const/*iterator*/<OtherConst>& x,const/*sentinel*/& y); template<bool OtherConst>      requires sized_sentinel_for<sentinel_t</*Base*/>,                                  iterator_t</*maybe-const*/<OtherConst, V>>>friendconstexpr range_difference_t</*maybe-const*/<OtherConst, V>> operator-(const/*sentinel*/& y,const/*iterator*/<OtherConst>& x);};}

      [edit]Class templatestd::ranges::take_view

      namespace std::ranges{template<view V>class take_view:public view_interface<take_view<V>>{private:    V/*base_*/= V();// exposition-only    range_difference_t<V>/*count_*/=0;// exposition-only // class template take_view::sentineltemplate<bool>class/*sentinel*/;// exposition-only public:    take_view()      requires default_initializable<V>=default;constexprexplicit take_view(V base, range_difference_t<V> count); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexprauto begin()      requires(!/*simple-view*/<V>){ifconstexpr(sized_range<V>){ifconstexpr(random_access_range<V>){returnranges::begin(/*base_*/);}else{auto sz= range_difference_t<V>(size());return counted_iterator(ranges::begin(/*base_*/), sz);}}elseifconstexpr(sized_sentinel_for<sentinel_t<V>, iterator_t<V>>){auto it=ranges::begin(/*base_*/);auto sz=std::min(/*count_*/,ranges::end(/*base_*/)- it);return counted_iterator(std::move(it), sz);}else{return counted_iterator(ranges::begin(/*base_*/),/*count_*/);}} constexprauto begin()const      requires range<const V>{ifconstexpr(sized_range<const V>){ifconstexpr(random_access_range<const V>){returnranges::begin(/*base_*/);}else{auto sz= range_difference_t<const V>(size());return counted_iterator(ranges::begin(/*base_*/), sz);}}elseifconstexpr(sized_sentinel_for<sentinel_t<const V>, iterator_t<const V>>){auto it=ranges::begin(/*base_*/);auto sz=std::min(/*count_*/,ranges::end(/*base_*/)- it);return counted_iterator(std::move(it), sz);}else{return counted_iterator(ranges::begin(/*base_*/),/*count_*/);}} constexprauto end()      requires(!/*simple-view*/<V>){ifconstexpr(sized_range<V>){ifconstexpr(random_access_range<V>)returnranges::begin(/*base_*/)+ range_difference_t<V>(size());elsereturn default_sentinel;}elseifconstexpr(sized_sentinel_for<sentinel_t<V>, iterator_t<V>>){return default_sentinel;}else{return/*sentinel*/<false>{ranges::end(/*base_*/)};}} constexprauto end()const      requires range<const V>{ifconstexpr(sized_range<const V>){ifconstexpr(random_access_range<const V>)returnranges::begin(/*base_*/)+ range_difference_t<const V>(size());elsereturn default_sentinel;}elseifconstexpr(sized_sentinel_for<sentinel_t<const V>, iterator_t<const V>>){return default_sentinel;}else{return/*sentinel*/<true>{ranges::end(/*base_*/)};}} constexprauto size()      requires sized_range<V>{auto n=ranges::size(/*base_*/);returnranges::min(n,static_cast<decltype(n)>(/*count_*/));} constexprauto size()const      requires sized_range<const V>{auto n=ranges::size(/*base_*/);returnranges::min(n,static_cast<decltype(n)>(/*count_*/));} constexprauto reserve_hint(){ifconstexpr(approximately_sized_range<V>){auto n=static_cast<range_difference_t<V>>(ranges::reserve_hint(/*base_*/));return/*to-unsigned-like*/(ranges::min(n,/*count_*/));}return/*to-unsigned-like*/(/*count_*/);} constexprauto reserve_hint()const{ifconstexpr(approximately_sized_range<const V>){auto n=static_cast<range_difference_t<const V>>(ranges::reserve_hint(/*base_*/));return/*to-unsigned-like*/(ranges::min(n,/*count_*/));}return/*to-unsigned-like*/(/*count_*/);}}; template<class R>  take_view(R&&, range_difference_t<R>)-> take_view<views::all_t<R>>;}

      [edit]Class templatestd::ranges::take_view::sentinel

      namespace std::ranges{template<view V>template<bool Const>class take_view<V>::/*sentinel*/{private:using/*Base*/=/*maybe-const*/<Const, V>;// exposition-onlytemplate<bool OtherConst>using/*CI*/=      counted_iterator<iterator_t</*maybe-const*/<OtherConst, V>>>;// exposition-only    sentinel_t</*Base*/>/*end_*/= sentinel_t</*Base*/>();// exposition-only public:/*sentinel*/()=default;constexprexplicit/*sentinel*/(sentinel_t</*Base*/> end);constexpr/*sentinel*/(/*sentinel*/<!Const> s)      requires Const&& convertible_to<sentinel_t<V>, sentinel_t</*Base*/>>; constexpr sentinel_t</*Base*/> base()const; friendconstexprbool operator==(const/*CI*/<Const>& y,const/*sentinel*/& x); template<bool OtherConst=!Const>      requires sentinel_for<sentinel_t</*Base*/>,                            iterator_t</*maybe-const*/<OtherConst, V>>>friendconstexprbool operator==(const/*CI*/<OtherConst>& y,const/*sentinel*/& x);};}

      [edit]Class templatestd::ranges::take_while_view

      namespace std::ranges{template<view V,class Pred>    requires input_range<V>&& is_object_v<Pred>&&             indirect_unary_predicate<const Pred, iterator_t<V>>class take_while_view:public view_interface<take_while_view<V, Pred>>{// class template take_while_view::sentineltemplate<bool>class/*sentinel*/;// exposition-only     V/*base_*/= V();// exposition-only/*movable-box*/<Pred>/*pred_*/;// exposition-only public:    take_while_view()      requires default_initializable<V>&& default_initializable<Pred>=default;constexprexplicit take_while_view(V base, Pred pred); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexprconst Pred& pred()const; constexprauto begin()      requires(!/*simple-view*/<V>){returnranges::begin(/*base_*/);} constexprauto begin()const      requires range<const V>&& indirect_unary_predicate<const Pred, iterator_t<const V>>{returnranges::begin(/*base_*/);} constexprauto end()      requires(!/*simple-view*/<V>){return/*sentinel*/<false>(ranges::end(/*base_*/), addressof(*/*pred_*/));} constexprauto end()const      requires range<const V>&& indirect_unary_predicate<const Pred, iterator_t<const V>>{return/*sentinel*/<true>(ranges::end(/*base_*/), addressof(*/*pred_*/));}}; template<class R,class Pred>  take_while_view(R&&, Pred)-> take_while_view<views::all_t<R>, Pred>;}

      [edit]Class templatestd::ranges::take_while_view::sentinel

      namespace std::ranges{template<view V,class Pred>    requires input_range<V>&& is_object_v<Pred>&&             indirect_unary_predicate<const Pred, iterator_t<V>>template<bool Const>class take_while_view<V, Pred>::/*sentinel*/{using/*Base*/=/*maybe-const*/<Const, V>;// exposition-only     sentinel_t</*Base*/>/*end_*/= sentinel_t</*Base*/>();// exposition-onlyconst Pred*/*pred_*/= nullptr;// exposition-only public:/*sentinel*/()=default;constexprexplicit/*sentinel*/(sentinel_t</*Base*/> end,const Pred* pred);constexpr/*sentinel*/(/*sentinel*/<!Const> s)      requires Const&& convertible_to<sentinel_t<V>, sentinel_t</*Base*/>>; constexpr sentinel_t</*Base*/> base()const{return/*end_*/;} friendconstexprbool operator==(const iterator_t</*Base*/>& x,const/*sentinel*/& y); template<bool OtherConst=!Const>      requires sentinel_for<sentinel_t</*Base*/>,                            iterator_t</*maybe-const*/<OtherConst, V>>>friendconstexprbool operator==(const iterator_t</*maybe-const*/<OtherConst, V>>& x,const/*sentinel*/& y);};}

      [edit]Class templatestd::ranges::drop_view

      namespace std::ranges{template<view V>class drop_view:public view_interface<drop_view<V>>{public:    drop_view()      requires default_initializable<V>=default;constexprexplicit drop_view(V base, range_difference_t<V> count); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexprauto begin()      requires(!(/*simple-view*/<V>&& random_access_range<const V>&&                 sized_range<const V>));constexprauto begin()const      requires random_access_range<const V>&& sized_range<const V>; constexprauto end()      requires(!/*simple-view*/<V>){returnranges::end(/*base_*/);} constexprauto end()const      requires range<const V>{returnranges::end(/*base_*/);} constexprauto size()      requires sized_range<V>{constauto s=ranges::size(/*base_*/);constauto c=static_cast<decltype(s)>(/*count_*/);return s< c?0: s- c;} constexprauto size()const      requires sized_range<const V>{constauto s=ranges::size(/*base_*/);constauto c=static_cast<decltype(s)>(/*count_*/);return s< c?0: s- c;} constexprauto reserve_hint()      requires approximately_sized_range<V>{constauto s=static_cast<range_difference_t<V>>(ranges::reserve_hint(/*base_*/));return/*to-unsigned-like*/(s</*count_*/?0: s-/*count_*/);} constexprauto reserve_hint()const      requires approximately_sized_range<const V>{constauto s=static_cast<range_difference_t<const V>>(ranges::reserve_hint(/*base_*/));return/*to-unsigned-like*/(s</*count_*/?0: s-/*count_*/);} private:    V/*base_*/= V();// exposition-only    range_difference_t<V>/*count_*/=0;// exposition-only}; template<class R>  drop_view(R&&, range_difference_t<R>)-> drop_view<views::all_t<R>>;}

      [edit]Class templatestd::ranges::drop_while_view

      namespace std::ranges{template<view V,class Pred>    requires input_range<V>&& is_object_v<Pred>&&             indirect_unary_predicate<const Pred, iterator_t<V>>class drop_while_view:public view_interface<drop_while_view<V, Pred>>{public:    drop_while_view()      requires default_initializable<V>&& default_initializable<Pred>=default;constexprexplicit drop_while_view(V base, Pred pred); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexprconst Pred& pred()const; constexprauto begin(); constexprauto end(){returnranges::end(/*base_*/);} private:    V/*base_*/= V();// exposition-only/*movable-box*/<Pred>/*pred_*/;// exposition-only}; template<class R,class Pred>  drop_while_view(R&&, Pred)-> drop_while_view<views::all_t<R>, Pred>;}

      [edit]Class templatestd::ranges::join_view

      namespace std::ranges{template<input_range V>    requires view<V>&& input_range<range_reference_t<V>>class join_view:public view_interface<join_view<V>>{private:using/*InnerRng*/= range_reference_t<V>;// exposition-only // class template join_view::iteratortemplate<bool Const>struct/*iterator*/;// exposition-only // class template join_view::sentineltemplate<bool Const>struct/*sentinel*/;// exposition-only     V/*base_*/= V();// exposition-only /*non-propagating-cache*/<iterator_t<V>>/*outer_*/;// exposition-only present only// when !forward_range<V>/*non-propagating-cache*/<remove_cv_t</*InnerRng*/>>/*inner_*/;// exposition-only present only// if is_reference_v<InnerRng> is false public:    join_view()      requires default_initializable<V>=default;constexprexplicit join_view(V base); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexprauto begin(){ifconstexpr(forward_range<V>){constexprbool use_const=/*simple-view*/<V>&& is_reference_v</*InnerRng*/>;return/*iterator*/<use_const>{*this,ranges::begin(/*base_*/)};}else{/*outer_*/=ranges::begin(/*base_*/);return/*iterator*/<false>{*this};}} constexprauto begin()const      requires forward_range<const V>&& is_reference_v<range_reference_t<const V>>&&               input_range<range_reference_t<const V>>{return/*iterator*/<true>{*this,ranges::begin(/*base_*/)};} constexprauto end(){ifconstexpr(forward_range<V>&& is_reference_v</*InnerRng*/>&&                    forward_range</*InnerRng*/>&& common_range<V>&&                    common_range</*InnerRng*/>)return/*iterator*/</*simple-view*/<V>>{*this,ranges::end(/*base_*/)};elsereturn/*sentinel*/</*simple-view*/<V>>{*this};} constexprauto end()const      requires forward_range<const V>&& is_reference_v<range_reference_t<const V>>&&               input_range<range_reference_t<const V>>{ifconstexpr(forward_range<range_reference_t<const V>>&& common_range<const V>&&                    common_range<range_reference_t<const V>>)return/*iterator*/<true>{*this,ranges::end(/*base_*/)};elsereturn/*sentinel*/<true>{*this};}}; template<class R>explicit join_view(R&&)-> join_view<views::all_t<R>>;}

      [edit]Class templatestd::ranges::join_view::iterator

      namespace std::ranges{template<input_range V>    requires view<V>&& input_range<range_reference_t<V>>template<bool Const>struct join_view<V>::/*iterator*/{private:using/*Parent*/=/*maybe-const*/<Const, join_view>;// exposition-onlyusing/*Base*/=/*maybe-const*/<Const, V>;// exposition-onlyusing/*OuterIter*/= iterator_t</*Base*/>;// exposition-onlyusing/*InnerIter*/= iterator_t<range_reference_t</*Base*/>>;// exposition-only staticconstexprbool/*ref-is-glvalue*/=// exposition-only      is_reference_v<range_reference_t</*Base*/>>; /*OuterIter*//*outer_*/=/*OuterIter*/();// exposition-only present only// if Base models forward_range    optional</*InnerIter*/>/*inner_*/;// exposition-only/*Parent*/*/*parent_*/= nullptr;// exposition-only constexprvoid/*satisfy*/();// exposition-only constexpr/*OuterIter*/&/*outer*/();// exposition-onlyconstexprconst/*OuterIter*/&/*outer*/()const;// exposition-only constexpr/*iterator*/(/*Parent*/& parent,/*OuterIter*/ outer)      requires forward_range</*Base*/>;// exposition-onlyconstexprexplicit/*iterator*/(/*Parent*/& parent)      requires(!forward_range</*Base*/>);// exposition-only public:using iterator_concept=/* see description */;using iterator_category=/* see description */;// not always presentusing value_type= range_value_t<range_reference_t</*Base*/>>;using difference_type=/* see description */; /*iterator*/()=default;constexpr/*iterator*/(/*iterator*/<!Const> i)      requires Const&& convertible_to<iterator_t<V>,/*OuterIter*/>&&               convertible_to<iterator_t</*InnerRng*/>,/*InnerIter*/>; constexpr decltype(auto) operator*()const{return**/*inner_*/;} constexpr/*InnerIter*/ operator->()const      requires/*has-arrow*/</*InnerIter*/>&& copyable</*InnerIter*/>; constexpr/*iterator*/& operator++();constexprvoid operator++(int);constexpr/*iterator*/ operator++(int)      requires/*ref-is-glvalue*/&& forward_range</*Base*/>&& forward_range<range_reference_t</*Base*/>>; constexpr/*iterator*/& operator--()      requires/*ref-is-glvalue*/&& bidirectional_range</*Base*/>&&               bidirectional_range<range_reference_t</*Base*/>>&&               common_range<range_reference_t</*Base*/>>; constexpr/*iterator*/ operator--(int)      requires/*ref-is-glvalue*/&& bidirectional_range</*Base*/>&&               bidirectional_range<range_reference_t</*Base*/>>&&               common_range<range_reference_t</*Base*/>>; friendconstexprbool operator==(const/*iterator*/& x,const/*iterator*/& y)      requires/*ref-is-glvalue*/&& forward_range</*Base*/>&&               equality_comparable<iterator_t<range_reference_t</*Base*/>>>; friendconstexpr decltype(auto) iter_move(const/*iterator*/& i)noexcept(noexcept(ranges::iter_move(*i./*inner_*/))){returnranges::iter_move(*i./*inner_*/);} friendconstexprvoid iter_swap(const/*iterator*/& x,const/*iterator*/& y)noexcept(noexcept(ranges::iter_swap(*x./*inner_*/,*y./*inner_*/)))      requires indirectly_swappable</*InnerIter*/>;};}

      [edit]Class templatestd::ranges::join_view::sentinel

      namespace std::ranges{template<input_range V>    requires view<V>&& input_range<range_reference_t<V>>template<bool Const>struct join_view<V>::/*sentinel*/{private:using/*Parent*/=/*maybe-const*/<Const, join_view>;// exposition-onlyusing/*Base*/=/*maybe-const*/<Const, V>;// exposition-only    sentinel_t</*Base*/>/*end_*/= sentinel_t</*Base*/>();// exposition-only public:/*sentinel*/()=default; constexprexplicit/*sentinel*/(/*Parent*/& parent);constexpr/*sentinel*/(/*sentinel*/<!Const> s)      requires Const&& convertible_to<sentinel_t<V>, sentinel_t</*Base*/>>; template<bool OtherConst>      requires sentinel_for<sentinel_t</*Base*/>,                            iterator_t</*maybe-const*/<OtherConst, V>>>friendconstexprbool operator==(const/*iterator*/<OtherConst>& x,const/*sentinel*/& y);};}

      [edit]Class templatestd::ranges::join_with_view

      namespace std::ranges{template<class R>  concept/*bidirectional-common*/=    bidirectional_range<R>&& common_range<R>;// exposition-only template<input_range V, forward_range Pattern>    requires view<V>&& input_range<range_reference_t<V>>&& view<Pattern>&&/*concatable*/<range_reference_t<V>, Pattern>class join_with_view:public view_interface<join_with_view<V, Pattern>>{using/*InnerRng*/= range_reference_t<V>;// exposition-only     V/*base_*/= V();// exposition-only/*non-propagating-cache*/<iterator_t<V>>/*outer-it_*/;// exposition-only present// only when !forward_range<V>/*non-propagating-cache*/<remove_cv_t</*InnerRng*/>>/*inner_*/;// exposition-only present only// if is_reference_v<InnerRng> is false    Pattern/*pattern_*/= Pattern();// exposition-only // class template join_with_view::iteratortemplate<bool Const>struct/*iterator*/;// exposition-only // class template join_with_view::sentineltemplate<bool Const>struct/*sentinel*/;// exposition-only public:    join_with_view()      requires default_initializable<V>&& default_initializable<Pattern>=default; constexprexplicit join_with_view(V base, Pattern pattern); template<input_range R>      requires constructible_from<V,views::all_t<R>>&&               constructible_from<Pattern, single_view<range_value_t</*InnerRng*/>>>constexprexplicit join_with_view(R&& r, range_value_t</*InnerRng*/> e); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexprauto begin(){ifconstexpr(forward_range<V>){constexprbool use_const=/*simple-view*/<V>&& is_reference_v</*InnerRng*/>&&/*simple-view*/<Pattern>;return/*iterator*/<use_const>{*this,ranges::begin(/*base_*/)};}else{/*outer-it_*/=ranges::begin(/*base_*/);return/*iterator*/<false>{*this};}}constexprauto begin()const      requires forward_range<const V>&& forward_range<const Pattern>&&               is_reference_v<range_reference_t<const V>>&&               input_range<range_reference_t<const V>>&&/*concatable*/<range_reference_t<const V>,const Pattern>{return/*iterator*/<true>{*this,ranges::begin(/*base_*/)};} constexprauto end(){ifconstexpr(forward_range<V>&& is_reference_v</*InnerRng*/>&&                    forward_range</*InnerRng*/>&& common_range<V>&&                    common_range</*InnerRng*/>)return/*iterator*/</*simple-view*/<V>&&/*simple-view*/< Pattern>>{*this,ranges::end(/*base_*/)};elsereturn/*sentinel*/</*simple-view*/<V>&&/*simple-view*/< Pattern>>{*this};}constexprauto end()const      requires forward_range<const V>&& forward_range<const Pattern>&&               is_reference_v<range_reference_t<const V>>&&               input_range<range_reference_t<const V>>&&/*concatable*/<range_reference_t<const V>,const Pattern>{using InnerConstRng= range_reference_t<const V>;ifconstexpr(forward_range<InnerConstRng>&& common_range<const V>&&                    common_range<InnerConstRng>)return/*iterator*/<true>{*this,ranges::end(/*base_*/)};elsereturn/*sentinel*/<true>{*this};}}; template<class R,class P>  join_with_view(R&&, P&&)-> join_with_view<views::all_t<R>,views::all_t<P>>; template<input_range R>  join_with_view(R&&, range_value_t<range_reference_t<R>>)-> join_with_view<views::all_t<R>, single_view<range_value_t<range_reference_t<R>>>>;}

      [edit]Class templatestd::ranges::join_with_view::iterator

      namespace std::ranges{template<input_range V, forward_range Pattern>    requires view<V>&& input_range<range_reference_t<V>>&& view<Pattern>&&/*concatable*/<range_reference_t<V>, Pattern>template<bool Const>class join_with_view<V, Pattern>::/*iterator*/{using/*Parent*/=/*maybe-const*/<Const, join_with_view>;// exposition-onlyusing/*Base*/=/*maybe-const*/<Const, V>;// exposition-onlyusing/*InnerBase*/= range_reference_t</*Base*/>;// exposition-onlyusing/*PatternBase*/=/*maybe-const*/<Const, Pattern>;// exposition-only using/*OuterIter*/= iterator_t</*Base*/>;// exposition-onlyusing/*InnerIter*/= iterator_t</*InnerBase*/>;// exposition-onlyusing/*PatternIter*/= iterator_t</*PatternBase*/>;// exposition-only staticconstexprbool/*ref-is-glvalue*/=      is_reference_v</*InnerBase*/>;// exposition-only /*Parent*/*/*parent_*/= nullptr;// exposition-only/*OuterIter*//*outer-it_*/=/*OuterIter*/();// exposition-only present only// if Base models forward_range    variant</*PatternIter*/,/*InnerIter*/>/*inner-it_*/;// exposition-only constexpr/*iterator*/(/*Parent*/& parent,/*OuterIter*/ outer)      requires forward_range</*Base*/>;// exposition-onlyconstexprexplicit/*iterator*/(/*Parent*/& parent)      requires(!forward_range</*Base*/>);// exposition-onlyconstexpr/*OuterIter*/&/*outer*/();// exposition-onlyconstexprconst/*OuterIter*/&/*outer*/()const;// exposition-onlyconstexprauto&/*update-inner*/();// exposition-onlyconstexprauto&/*get-inner*/();// exposition-onlyconstexprvoid/*satisfy*/();// exposition-only public:using iterator_concept=/* see description */;using iterator_category=/* see description */;// not always presentusing value_type=/* see description */;using difference_type=/* see description */; /*iterator*/()=default;constexpr/*iterator*/(/*iterator*/<!Const> i)      requires Const&& convertible_to<iterator_t<V>,/*OuterIter*/>&&               convertible_to<iterator_t</*InnerRng*/>,/*InnerIter*/>&&               convertible_to<iterator_t<Pattern>,/*PatternIter*/>; constexpr decltype(auto) operator*()const; constexpr/*iterator*/& operator++();constexprvoid operator++(int);constexpr/*iterator*/ operator++(int)      requires/*ref-is-glvalue*/&& forward_iterator</*OuterIter*/>&& forward_iterator</*InnerIter*/>; constexpr/*iterator*/& operator--()      requires/*ref-is-glvalue*/&& bidirectional_range</*Base*/>&&/*bidirectional-common*/</*InnerBase*/>&&/*bidirectional-common*/</*PatternBase*/>;constexpr/*iterator*/ operator--(int)      requires/*ref-is-glvalue*/&& bidirectional_range</*Base*/>&&/*bidirectional-common*/</*InnerBase*/>&&/*bidirectional-common*/</*PatternBase*/>; friendconstexprbool operator==(const/*iterator*/& x,const/*iterator*/& y)      requires/*ref-is-glvalue*/&& forward_range</*Base*/>&& equality_comparable</*InnerIter*/>; friendconstexpr decltype(auto) iter_move(const/*iterator*/& x){using rvalue_reference=        common_reference_t<iter_rvalue_reference_t</*InnerIter*/>,                           iter_rvalue_reference_t</*PatternIter*/>>;return visit<rvalue_reference>(ranges::iter_move, x./*inner-it_*/);} friendconstexprvoid iter_swap(const/*iterator*/& x,const/*iterator*/& y)      requires indirectly_swappable</*InnerIter*/,/*PatternIter*/>{      visit(ranges::iter_swap, x./*inner-it_*/, y./*inner-it_*/);}};}

      [edit]Class templatestd::ranges::join_with_view::sentinel

      namespace std::ranges{template<input_range V, forward_range Pattern>    requires view<V>&& input_range<range_reference_t<V>>&& view<Pattern>&&/*concatable*/<range_reference_t<V>, Pattern>template<bool Const>class join_with_view<V, Pattern>::/*sentinel*/{using/*Parent*/=/*maybe-const*/<Const, join_with_view>;// exposition-onlyusing/*Base*/=/*maybe-const*/<Const, V>;// exposition-only    sentinel_t</*Base*/>/*end_*/= sentinel_t</*Base*/>();// exposition-only constexprexplicit/*sentinel*/(/*Parent*/& parent);// exposition-only public:/*sentinel*/()=default;constexpr/*sentinel*/(/*sentinel*/<!Const> s)      requires Const&& convertible_to<sentinel_t<V>, sentinel_t</*Base*/>>; template<bool OtherConst>      requires sentinel_for<sentinel_t</*Base*/>,                            iterator_t</*maybe-const*/<OtherConst, V>>>friendconstexprbool operator==(const/*iterator*/<OtherConst>& x,const/*sentinel*/& y);};}

      [edit]Class templatestd::ranges::lazy_split_view

      namespace std::ranges{template<auto>struct/*require-constant*/;// exposition-only template<class R>  concept/*tiny-range*/=// exposition-only    sized_range<R>&& requires{typename/*require-constant*/<remove_reference_t<R>::size()>;}&&(remove_reference_t<R>::size()<=1); template<input_range V, forward_range Pattern>    requires view<V>&& view<Pattern>&&             indirectly_comparable<iterator_t<V>,                                   iterator_t<Pattern>,ranges::equal_to>&&(forward_range<V>||/*tiny-range*/<Pattern>)class lazy_split_view:public view_interface<lazy_split_view<V, Pattern>>{private:    V/*base_*/= V();// exposition-only    Pattern/*pattern_*/= Pattern();// exposition-only /*non-propagating-cache*/<iterator_t<V>>/*current_*/;// exposition-only present only// if forward_range<V> is false // class template lazy_split_view::outer-iteratortemplate<bool>struct/*outer-iterator*/;// exposition-only // class template lazy_split_view::inner-iteratortemplate<bool>struct/*inner-iterator*/;// exposition-only public:    lazy_split_view()      requires default_initializable<V>&& default_initializable<Pattern>=default;constexprexplicit lazy_split_view(V base, Pattern pattern); template<input_range R>      requires constructible_from<V,views::all_t<R>>&&               constructible_from<Pattern, single_view<range_value_t<R>>>constexprexplicit lazy_split_view(R&& r, range_value_t<R> e); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexprauto begin(){ifconstexpr(forward_range<V>){return/*outer-iterator*/</*simple-view*/<V>&&/*simple-view*/< Pattern>>{*this,ranges::begin(/*base_*/)};}else{/*current_*/=ranges::begin(/*base_*/);return/*outer-iterator*/<false>{*this};}} constexprauto begin()const      requires forward_range<V>&& forward_range<const V>{return/*outer-iterator*/<true>{*this,ranges::begin(/*base_*/)};} constexprauto end()      requires forward_range<V>&& common_range<V>{return/*outer-iterator*/</*simple-view*/<V>&&/*simple-view*/< Pattern>>{*this,ranges::end(/*base_*/)};} constexprauto end()const{ifconstexpr(forward_range<V>&& forward_range<const V>&& common_range<const V>)return/*outer-iterator*/<true>{*this,ranges::end(/*base_*/)};elsereturn default_sentinel;}}; template<class R,class P>  lazy_split_view(R&&, P&&)-> lazy_split_view<views::all_t<R>,views::all_t<P>>; template<input_range R>  lazy_split_view(R&&, range_value_t<R>)-> lazy_split_view<views::all_t<R>, single_view<range_value_t<R>>>;}

      [edit]Class templatestd::ranges::lazy_split_view::outer_iterator

      namespace std::ranges{template<input_range V, forward_range Pattern>    requires view<V>&& view<Pattern>&&             indirectly_comparable<iterator_t<V>,                                   iterator_t<Pattern>,ranges::equal_to>&&(forward_range<V>||/*tiny-range*/<Pattern>)template<bool Const>struct lazy_split_view<V, Pattern>::/*outer-iterator*/{private:using/*Parent*/=/*maybe-const*/<Const, lazy_split_view>;// exposition-onlyusing/*Base*/=/*maybe-const*/<Const, V>;// exposition-only/*Parent*/*/*parent_*/= nullptr;// exposition-only     iterator_t</*Base*/>/*current_*/=      iterator_t</*Base*/>();// exposition-only present only// if V models forward_range bool/*trailing-empty_*/=false;// exposition-only public:using iterator_concept=      conditional_t<forward_range</*Base*/>, forward_iterator_tag, input_iterator_tag>; using iterator_category= input_iterator_tag;// present only if Base// models forward_range // class lazy_split_view::outer-iterator::value_typestruct value_type;using difference_type= range_difference_t</*Base*/>; /*outer-iterator*/()=default;constexprexplicit/*outer-iterator*/(/*Parent*/& parent)      requires(!forward_range</*Base*/>);constexpr/*outer-iterator*/(/*Parent*/& parent, iterator_t</*Base*/> current)      requires forward_range</*Base*/>;constexpr/*outer-iterator*/(/*outer-iterator*/<!Const> i)      requires Const&& convertible_to<iterator_t<V>, iterator_t</*Base*/>>; constexpr value_type operator*()const; constexpr/*outer-iterator*/& operator++();constexpr decltype(auto) operator++(int){ifconstexpr(forward_range</*Base*/>){auto tmp=*this;++*this;return tmp;}else++*this;} friendconstexprbool operator==(const/*outer-iterator*/& x,const/*outer-iterator*/& y)      requires forward_range</*Base*/>; friendconstexprbool operator==(const/*outer-iterator*/& x, default_sentinel_t);};}

      [edit]Class templatestd::ranges::lazy_split_view::outer_iterator::value_type

      namespace std::ranges{template<input_range V, forward_range Pattern>    requires view<V>&& view<Pattern>&&             indirectly_comparable<iterator_t<V>,                                   iterator_t<Pattern>,ranges::equal_to>&&(forward_range<V>||/*tiny-range*/<Pattern>)template<bool Const>struct lazy_split_view<V, Pattern>::/*outer-iterator*/<Const>::value_type: view_interface<value_type>{private:/*outer-iterator*//*i_*/=/*outer-iterator*/();// exposition-only constexprexplicit value_type(/*outer-iterator*/ i);// exposition-only public:constexpr/*inner-iterator*/<Const> begin()const;constexpr default_sentinel_t end()constnoexcept;};}

      [edit]Class templatestd::ranges::lazy_split_view::inner_iterator

      namespace std::ranges{template<input_range V, forward_range Pattern>    requires view<V>&& view<Pattern>&&             indirectly_comparable<iterator_t<V>,                                   iterator_t<Pattern>,ranges::equal_to>&&(forward_range<V>||/*tiny-range*/<Pattern>)template<bool Const>struct lazy_split_view<V, Pattern>::/*inner-iterator*/{private:using/*Base*/=/*maybe-const*/<Const, V>;// exposition-only/*outer-iterator*/<Const>/*i_*/=/*outer-iterator*/<Const>();// exposition-onlybool/*incremented_*/=false;// exposition-only public:using iterator_concept=typename/*outer-iterator*/<Const>::iterator_concept; using iterator_category=/* see description */;// present only if Base// models forward_rangeusing value_type= range_value_t</*Base*/>;using difference_type= range_difference_t</*Base*/>; /*inner-iterator*/()=default;constexprexplicit/*inner-iterator*/(/*outer-iterator*/<Const> i); constexprconst iterator_t</*Base*/>& base()const&noexcept;constexpr iterator_t</*Base*/> base()&&        requires forward_range<V>; constexpr decltype(auto) operator*()const{return*/*i_*/./*current*/;} constexpr/*inner-iterator*/& operator++();constexpr decltype(auto) operator++(int){ifconstexpr(forward_range</*Base*/>){auto tmp=*this;++*this;return tmp;}else++*this;} friendconstexprbool operator==(const/*inner-iterator*/& x,const/*inner-iterator*/& y)      requires forward_range</*Base*/>; friendconstexprbool operator==(const/*inner-iterator*/& x, default_sentinel_t); friendconstexpr decltype(auto) iter_move(const/*inner-iterator*/& i)noexcept(noexcept(ranges::iter_move(i./*i_*/./*current*/))){returnranges::iter_move(i./*i_*/./*current*/);} friendconstexprvoid    iter_swap(const/*inner-iterator*/& x,const/*inner-iterator*/& y)noexcept(noexcept(ranges::iter_swap(x./*i_*/./*current*/, y./*i_*/./*current*/)))      requires indirectly_swappable<iterator_t</*Base*/>>;};}

      [edit]Class templatestd::ranges::split_view

      namespace std::ranges{template<forward_range V, forward_range Pattern>    requires view<V>&& view<Pattern>&&             indirectly_comparable<iterator_t<V>, iterator_t<Pattern>,ranges::equal_to>class split_view:public view_interface<split_view<V, Pattern>>{private:    V/*base_*/= V();// exposition-only    Pattern/*pattern_*/= Pattern();// exposition-only // class split_view::iteratorstruct/*iterator*/;// exposition-only // class split_view::sentinelstruct/*sentinel*/;// exposition-only public:    split_view()      requires default_initializable<V>&& default_initializable<Pattern>=default;constexprexplicit split_view(V base, Pattern pattern); template<forward_range R>      requires constructible_from<V,views::all_t<R>>&&               constructible_from<Pattern, single_view<range_value_t<R>>>constexprexplicit split_view(R&& r, range_value_t<R> e); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexpr/*iterator*/ begin(); constexprauto end(){ifconstexpr(common_range<V>){return/*iterator*/{*this,ranges::end(/*base_*/),{}};}else{return/*sentinel*/{*this};}} constexpr subrange<iterator_t<V>>/*find-next*/(iterator_t<V>);// exposition-only}; template<class R,class P>  split_view(R&&, P&&)-> split_view<views::all_t<R>,views::all_t<P>>; template<forward_range R>  split_view(R&&, range_value_t<R>)-> split_view<views::all_t<R>, single_view<range_value_t<R>>>;}

      [edit]Class templatestd::ranges::split_view::iterator

      namespace std::ranges{template<forward_range V, forward_range Pattern>    requires view<V>&& view<Pattern>&&             indirectly_comparable<iterator_t<V>, iterator_t<Pattern>,ranges::equal_to>class split_view<V, Pattern>::/*iterator*/{private:    split_view*/*parent_*/= nullptr;// exposition-only    iterator_t<V>/*cur_*/= iterator_t<V>();// exposition-only    subrange<iterator_t<V>>/*next_*/= subrange<iterator_t<V>>();// exposition-onlybool/*trailing-empty_*/=false;// exposition-only public:using iterator_concept= forward_iterator_tag;using iterator_category= input_iterator_tag;using value_type= subrange<iterator_t<V>>;using difference_type= range_difference_t<V>; /*iterator*/()=default;constexpr/*iterator*/(split_view& parent,                           iterator_t<V> current,                           subrange<iterator_t<V>> next); constexpr iterator_t<V> base()const;constexpr value_type operator*()const; constexpr/*iterator*/& operator++();constexpr/*iterator*/ operator++(int); friendconstexprbool operator==(const/*iterator*/& x,const/*iterator*/& y);};}

      [edit]Class templatestd::ranges::split_view::sentinel

      namespace std::ranges{template<forward_range V, forward_range Pattern>    requires view<V>&& view<Pattern>&&             indirectly_comparable<iterator_t<V>, iterator_t<Pattern>,ranges::equal_to>struct split_view<V, Pattern>::/*sentinel*/{private:    sentinel_t<V>/*end_*/= sentinel_t<V>();// exposition-only public:/*sentinel*/()=default;constexprexplicit/*sentinel*/(split_view& parent); friendconstexprbool operator==(const/*iterator*/& x,const/*sentinel*/& y);};}

      [edit]Class templatestd::ranges::concat

      namespace std::ranges{template<class...Rs>using/*concat-reference-t*/=    common_reference_t<range_reference_t<Rs>...>;// exposition-onlytemplate<class...Rs>using/*concat-value-t*/= common_type_t<range_value_t<Rs>...>;// exposition-onlytemplate<class...Rs>using/*concat-rvalue-reference-t*/=// exposition-only    common_reference_t<range_rvalue_reference_t<Rs>...>; template<class...Rs>  concept/*concat-indirectly-readable*/=/* see description */;// exposition-onlytemplate<class...Rs>  concept/*concatable*/=/* see description */;// exposition-onlytemplate<bool Const,class...Rs>  concept/*concat-is-random-access*/=/* see description */;// exposition-onlytemplate<bool Const,class...Rs>  concept/*concat-is-bidirectional*/=/* see description */;// exposition-only template<input_range...Views>    requires(view<Views>&& ...)&&(sizeof...(Views)>0)&&/*concatable*/<Views...>class concat_view:public view_interface<concat_view<Views...>>{     tuple<Views...>/*views_*/;// exposition-only // class template concat_view::iteratortemplate<bool>class/*iterator*/;// exposition-only public:constexpr concat_view()=default;constexprexplicit concat_view(Views...views); constexpr/*iterator*/<false> begin()      requires(!(/*simple-view*/<Views>&& ...));constexpr/*iterator*/<true> begin()const      requires(range<const Views>&& ...)&&/*concatable*/<const Views...>; constexprauto end()      requires(!(/*simple-view*/<Views>&& ...));constexprauto end()const      requires(range<const Views>&& ...)&&/*concatable*/<const Views...>; constexprauto size()      requires(sized_range<Views>&& ...);constexprauto size()const      requires(sized_range<const Views>&& ...);}; template<class...R>  concat_view(R&&...)-> concat_view<views::all_t<R>...>;}

      [edit]Class templatestd::ranges::concat::iterator

      namespace std::ranges{template<input_range...Views>    requires(view<Views>&& ...)&&(sizeof...(Views)>0)&&/*concatable*/<Views...>template<bool Const>class concat_view<Views...>::/*iterator*/{ public:using iterator_category=/* see description */;// not always presentusing iterator_concept=/* see description */;using value_type=/*concat-value-t*/</*maybe-const*/<Const, Views>...>;using difference_type=      common_type_t<range_difference_t</*maybe-const*/<Const, Views>>...>; private:using/*base-iter*/=// exposition-only      variant<iterator_t</*maybe-const*/<Const, Views>>...>; /*maybe-const*/<Const, concat_view>*/*parent_*/= nullptr;// exposition-only/*base-iter*//*it_*/;// exposition-only template<size_t N>constexprvoid/*satisfy*/();// exposition-onlytemplate<size_t N>constexprvoid/*prev*/();// exposition-only template<size_t N>constexprvoid/*advance-fwd*/(difference_type offset,// exposition-only                                   difference_type steps);template<size_t N>constexprvoid/*advance-bwd*/(difference_type offset,// exposition-only                                   difference_type steps); template<class...Args>constexprexplicit/*iterator*/(/*maybe-const*/<Const, concat_view>* parent,// exposition-only      Args&&...args)      requires constructible_from</*base-iter*/, Args&&...>; public:/*iterator*/()=default; constexpr/*iterator*/(/*iterator*/<!Const> i)      requires Const&&(convertible_to<iterator_t<Views>, iterator_t<const Views>>&& ...); constexpr decltype(auto) operator*()const;constexpr/*iterator*/& operator++();constexprvoid operator++(int);constexpr/*iterator*/ operator++(int)      requires/*all-forward*/<Const, Views...>;constexpr/*iterator*/& operator--()      requires/*concat-is-bidirectional*/<Const, Views...>;constexpr/*iterator*/ operator--(int)      requires/*concat-is-bidirectional*/<Const, Views...>;constexpr/*iterator*/& operator+=(difference_type n)      requires/*concat-is-random-access*/<Const, Views...>;constexpr/*iterator*/& operator-=(difference_type n)      requires/*concat-is-random-access*/<Const, Views...>;constexpr decltype(auto) operator[](difference_type n)const      requires/*concat-is-random-access*/<Const, Views...>; friendconstexprbool operator==(const/*iterator*/& x,const/*iterator*/& y)      requires(equality_comparable<iterator_t</*maybe-const*/<Const, Views>>>&& ...);friendconstexprbool operator==(const/*iterator*/& it, default_sentinel_t);friendconstexprbool operator<(const/*iterator*/& x,const/*iterator*/& y)      requires/*all-random-access*/<Const, Views...>;friendconstexprbool operator>(const/*iterator*/& x,const/*iterator*/& y)      requires/*all-random-access*/<Const, Views...>;friendconstexprbool operator<=(const/*iterator*/& x,const/*iterator*/& y)      requires/*all-random-access*/<Const, Views...>;friendconstexprbool operator>=(const/*iterator*/& x,const/*iterator*/& y)      requires/*all-random-access*/<Const, Views...>;friendconstexprauto operator<=>(const/*iterator*/& x,const/*iterator*/& y)      requires(/*all-random-access*/<Const, Views...>&&(three_way_comparable<iterator_t</*maybe-const*/<Const, Views>>>&& ...));friendconstexpr/*iterator*/ operator+(const/*iterator*/& it, difference_type n)      requires/*concat-is-random-access*/<Const, Views...>;friendconstexpr/*iterator*/ operator+(difference_type n,const/*iterator*/& it)      requires/*concat-is-random-access*/<Const, Views...>;friendconstexpr/*iterator*/ operator-(const/*iterator*/& it, difference_type n)      requires/*concat-is-random-access*/<Const, Views...>;friendconstexpr difference_type operator-(const/*iterator*/& x,const/*iterator*/& y)      requires/*concat-is-random-access*/<Const, Views...>;friendconstexpr difference_type operator-(const/*iterator*/& x, default_sentinel_t)      requires/* see description */;friendconstexpr difference_type operator-(default_sentinel_t,const/*iterator*/& x)      requires/* see description */;friendconstexpr decltype(auto) iter_move(const/*iterator*/& it)noexcept(/* see description */);friendconstexprvoid iter_swap(const/*iterator*/& x,const/*iterator*/& y)noexcept(/* see description */)      requires/* see description */;};}

      [edit]Class templatestd::ranges::common_view

      namespace std::ranges{template<view V>    requires(!common_range<V>&& copyable<iterator_t<V>>)class common_view:public view_interface<common_view<V>>{private:    V/*base_*/= V();// exposition-only public:    common_view()      requires default_initializable<V>=default; constexprexplicit common_view(V r); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexprauto begin()      requires(!/*simple-view*/<V>){ifconstexpr(random_access_range<V>&& sized_range<V>)returnranges::begin(/*base_*/);elsereturn common_iterator<iterator_t<V>, sentinel_t<V>>(ranges::begin(/*base_*/));} constexprauto begin()const      requires range<const V>{ifconstexpr(random_access_range<const V>&& sized_range<const V>)returnranges::begin(/*base_*/);elsereturn common_iterator<iterator_t<const V>, sentinel_t<const V>>(ranges::begin(/*base_*/));} constexprauto end()      requires(!/*simple-view*/<V>){ifconstexpr(random_access_range<V>&& sized_range<V>)returnranges::begin(/*base_*/)+ranges::distance(/*base_*/);elsereturn common_iterator<iterator_t<V>, sentinel_t<V>>(ranges::end(/*base_*/));} constexprauto end()const      requires range<const V>{ifconstexpr(random_access_range<const V>&& sized_range<const V>)returnranges::begin(/*base_*/)+ranges::distance(/*base_*/);elsereturn common_iterator<iterator_t<const V>, sentinel_t<const V>>(ranges::end(/*base_*/));} constexprauto size()      requires sized_range<V>{returnranges::size(/*base_*/);}constexprauto size()const      requires sized_range<const V>{returnranges::size(/*base_*/);} constexprauto reserve_hint()      requires approximately_sized_range<V>{return ranges::reserve_hint(/*base_*/);}constexprauto reserve_hint()const      requires approximately_sized_range<const V>{return ranges::reserve_hint(/*base_*/);}}; template<class R>  common_view(R&&)-> common_view<views::all_t<R>>;}

      [edit]Class templatestd::ranges::reverse_view

      namespace std::ranges{template<view V>    requires bidirectional_range<V>class reverse_view:public view_interface<reverse_view<V>>{private:    V/*base_*/= V();// exposition-only public:    reverse_view()      requires default_initializable<V>=default; constexprexplicit reverse_view(V r); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexpr reverse_iterator<iterator_t<V>> begin();constexpr reverse_iterator<iterator_t<V>> begin()      requires common_range<V>;constexprauto begin()const      requires common_range<const V>; constexpr reverse_iterator<iterator_t<V>> end();constexprauto end()const      requires common_range<const V>; constexprauto size()      requires sized_range<V>{returnranges::size(/*base_*/);} constexprauto size()const      requires sized_range<const V>{returnranges::size(/*base_*/);} constexprauto reserve_hint()      requires approximately_sized_range<V>{return ranges::reserve_hint(/*base_*/);}constexprauto reserve_hint()const      requires approximately_sized_range<const V>{return ranges::reserve_hint(/*base_*/);}}; template<class R>  reverse_view(R&&)-> reverse_view<views::all_t<R>>;}

      [edit]Class templatestd::ranges::as_const_view

      namespace std::ranges{template<view V>    requires input_range<V>class as_const_view:public view_interface<as_const_view<V>>{    V/*base_*/= V();// exposition-only public:    as_const_view()      requires default_initializable<V>=default;constexprexplicit as_const_view(V base); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexprauto begin()      requires(!/*simple-view*/<V>){returnranges::cbegin(/*base_*/);}constexprauto begin()const      requires range<const V>{returnranges::cbegin(/*base_*/);} constexprauto end()      requires(!/*simple-view*/<V>){returnranges::cend(/*base_*/);}constexprauto end()const      requires range<const V>{returnranges::cend(/*base_*/);} constexprauto size()      requires sized_range<V>{returnranges::size(/*base_*/);}constexprauto size()const      requires sized_range<const V>{returnranges::size(/*base_*/);} constexprauto reserve_hint()      requires approximately_sized_range<V>{return ranges::reserve_hint(/*base_*/);}constexprauto reserve_hint()const      requires approximately_sized_range<const V>{return ranges::reserve_hint(/*base_*/);}}; template<class R>  as_const_view(R&&)-> as_const_view<views::all_t<R>>;}

      [edit]Class templatestd::ranges::elements_view

      namespace std::ranges{template<class T, size_t N>  concept/*has-tuple-element*/=// exposition-only/*tuple-like*/<T>&& N< tuple_size_v<T>; template<class T, size_t N>  concept/*returnable-element*/=// exposition-only    is_reference_v<T>|| move_constructible<tuple_element_t<N, T>>; template<input_range V, size_t N>    requires view<V>&&/*has-tuple-element*/<range_value_t<V>, N>&&/*has-tuple-element*/<remove_reference_t<range_reference_t<V>>, N>&&/*returnable-element*/<range_reference_t<V>, N>class elements_view:public view_interface<elements_view<V, N>>{public:    elements_view()      requires default_initializable<V>=default;constexprexplicit elements_view(V base); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexprauto begin()      requires(!/*simple-view*/<V>){return/*iterator*/<false>(ranges::begin(/*base_*/));} constexprauto begin()const      requires range<const V>{return/*iterator*/<true>(ranges::begin(/*base_*/));} constexprauto end()      requires(!/*simple-view*/<V>&&!common_range<V>){return/*sentinel*/<false>{ranges::end(/*base_*/)};} constexprauto end()      requires(!/*simple-view*/<V>&& common_range<V>){return/*iterator*/<false>{ranges::end(/*base_*/)};} constexprauto end()const      requires range<const V>{return/*sentinel*/<true>{ranges::end(/*base_*/)};} constexprauto end()const      requires common_range<const V>{return/*iterator*/<true>{ranges::end(/*base_*/)};} constexprauto size()      requires sized_range<V>{returnranges::size(/*base_*/);} constexprauto size()const      requires sized_range<const V>{returnranges::size(/*base_*/);} constexprauto reserve_hint()      requires approximately_sized_range<V>{return ranges::reserve_hint(/*base_*/);} constexprauto reserve_hint()const      requires approximately_sized_range<const V>{return ranges::reserve_hint(/*base_*/);} private:// class template elements_view::iteratortemplate<bool>class/*iterator*/;// exposition-only // class template elements_view::sentineltemplate<bool>class/*sentinel*/;// exposition-only     V/*base_*/= V();// exposition-only};}

      [edit]Class templatestd::ranges::elements_view::iterator

      namespace std::ranges{template<input_range V, size_t N>    requires view<V>&&/*has-tuple-element*/<range_value_t<V>, N>&&/*has-tuple-element*/<remove_reference_t<range_reference_t<V>>, N>&&/*returnable-element*/<range_reference_t<V>, N>template<bool Const>class elements_view<V, N>::/*iterator*/{using/*Base*/=/*maybe-const*/<Const, V>;// exposition-only     iterator_t</*Base*/>/*current_*/= iterator_t</*Base*/>();// exposition-only staticconstexpr decltype(auto)/*get-element*/(const iterator_t</*Base*/>& i);// exposition-only public:using iterator_concept=/* see description */;using iterator_category=/* see description */;// not always presentusing value_type= remove_cvref_t<tuple_element_t<N, range_value_t</*Base*/>>>;using difference_type= range_difference_t</*Base*/>; /*iterator*/()      requires default_initializable<iterator_t</*Base*/>>=default;constexprexplicit/*iterator*/(iterator_t</*Base*/> current);constexpr/*iterator*/(/*iterator*/<!Const> i)      requires Const&& convertible_to<iterator_t<V>, iterator_t</*Base*/>>; constexprconst iterator_t</*Base*/>& base()const&noexcept;constexpr iterator_t</*Base*/> base()&&; constexpr decltype(auto) operator*()const{return/*get-element*/(/*current_*/);} constexpr/*iterator*/& operator++();constexprvoid operator++(int);constexpr/*iterator*/ operator++(int)      requires forward_range</*Base*/>; constexpr/*iterator*/& operator--()      requires bidirectional_range</*Base*/>;constexpr/*iterator*/ operator--(int)      requires bidirectional_range</*Base*/>; constexpr/*iterator*/& operator+=(difference_type x)      requires random_access_range</*Base*/>;constexpr/*iterator*/& operator-=(difference_type x)      requires random_access_range</*Base*/>; constexpr decltype(auto) operator[](difference_type n)const      requires random_access_range</*Base*/>{return/*get-element*/(/*current_*/+ n);} friendconstexprbool operator==(const/*iterator*/& x,const/*iterator*/& y)      requires equality_comparable<iterator_t</*Base*/>>; friendconstexprbool operator<(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprbool operator>(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprbool operator<=(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprbool operator>=(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprauto operator<=>(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>&& three_way_comparable<iterator_t</*Base*/>>; friendconstexpr/*iterator*/ operator+(const/*iterator*/& x, difference_type y)      requires random_access_range</*Base*/>;friendconstexpr/*iterator*/ operator+(difference_type x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexpr/*iterator*/ operator-(const/*iterator*/& x, difference_type y)      requires random_access_range</*Base*/>;friendconstexpr difference_type operator-(const/*iterator*/& x,const/*iterator*/& y)      requires sized_sentinel_for<iterator_t</*Base*/>, iterator_t</*Base*/>>;};}

      [edit]Class templatestd::ranges::elements_view::sentinel

      namespace std::ranges{template<input_range V, size_t N>    requires view<V>&&/*has-tuple-element*/<range_value_t<V>, N>&&/*has-tuple-element*/<remove_reference_t<range_reference_t<V>>, N>&&/*returnable-element*/<range_reference_t<V>, N>template<bool Const>class elements_view<V, N>::/*sentinel*/{private:using/*Base*/=/*maybe-const*/<Const, V>;// exposition-only    sentinel_t</*Base*/>/*end_*/= sentinel_t</*Base*/>();// exposition-only public:/*sentinel*/()=default;constexprexplicit/*sentinel*/(sentinel_t</*Base*/> end);constexpr/*sentinel*/(/*sentinel*/<!Const> other)      requires Const&& convertible_to<sentinel_t<V>, sentinel_t</*Base*/>>; constexpr sentinel_t</*Base*/> base()const; template<bool OtherConst>      requires sentinel_for<sentinel_t</*Base*/>,                            iterator_t</*maybe-const*/<OtherConst, V>>>friendconstexprbool operator==(const/*iterator*/<OtherConst>& x,const/*sentinel*/& y); template<bool OtherConst>      requires sized_sentinel_for<sentinel_t</*Base*/>,                                  iterator_t</*maybe-const*/<OtherConst, V>>>friendconstexpr range_difference_t</*maybe-const*/<OtherConst, V>> operator-(const/*iterator*/<OtherConst>& x,const/*sentinel*/& y); template<bool OtherConst>      requires sized_sentinel_for<sentinel_t</*Base*/>,                                  iterator_t</*maybe-const*/<OtherConst, V>>>friendconstexpr range_difference_t</*maybe-const*/<OtherConst, V>> operator-(const/*sentinel*/& x,const/*iterator*/<OtherConst>& y);};}

      [edit]Class templatestd::ranges::enumerate_view

      namespace std::ranges{template<view V>    requires/*range-with-movable-references*/<V>class enumerate_view:public view_interface<enumerate_view<V>>{    V/*base_*/= V();// exposition-only // class template enumerate_view::iteratortemplate<bool Const>class/*iterator*/;// exposition-only // class template enumerate_view::sentineltemplate<bool Const>class/*sentinel*/;// exposition-only public:constexpr enumerate_view()      requires default_initializable<V>=default;constexprexplicit enumerate_view(V base); constexprauto begin()      requires(!/*simple-view*/<V>){return/*iterator*/<false>(ranges::begin(/*base_*/),0);}constexprauto begin()const      requires/*range-with-movable-references*/<const V>{return/*iterator*/<true>(ranges::begin(/*base_*/),0);} constexprauto end()      requires(!/*simple-view*/<V>){ifconstexpr(forward_range<V>&& common_range<V>&& sized_range<V>)return/*iterator*/<false>(ranges::end(/*base_*/),ranges::distance(/*base_*/));elsereturn/*sentinel*/<false>(ranges::end(/*base_*/));}constexprauto end()const      requires/*range-with-movable-references*/<const V>{ifconstexpr(forward_range<const V>&& common_range<const V>&&                    sized_range<const V>)return/*iterator*/<true>(ranges::end(/*base_*/),ranges::distance(/*base_*/));elsereturn/*sentinel*/<true>(ranges::end(/*base_*/));} constexprauto size()      requires sized_range<V>{returnranges::size(/*base_*/);}constexprauto size()const      requires sized_range<const V>{returnranges::size(/*base_*/);} constexprauto reserve_hint()      requires approximately_sized_range<V>{return ranges::reserve_hint(/*base_*/);}constexprauto reserve_hint()const      requires approximately_sized_range<const V>{return ranges::reserve_hint(/*base_*/);} constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);}}; template<class R>  enumerate_view(R&&)-> enumerate_view<views::all_t<R>>;}

      [edit]Class templatestd::ranges::enumerate_view::iterator

      namespace std::ranges{template<view V>    requires/*range-with-movable-references*/<V>template<bool Const>class enumerate_view<V>::/*iterator*/{using/*Base*/=/*maybe-const*/<Const, V>;// exposition-only public:using iterator_category= input_iterator_tag;using iterator_concept=/* see description */;using difference_type= range_difference_t</*Base*/>;using value_type= tuple<difference_type, range_value_t</*Base*/>>; private:using/*reference-type*/=// exposition-only      tuple<difference_type, range_reference_t</*Base*/>>;    iterator_t</*Base*/>/*current_*/= iterator_t</*Base*/>();// exposition-only    difference_type/*pos_*/=0;// exposition-only constexprexplicit/*iterator*/(iterator_t</*Base*/> current,                                    difference_type pos);// exposition-only public:/*iterator*/()      requires default_initializable<iterator_t</*Base*/>>=default;constexpr/*iterator*/(/*iterator*/<!Const> i)      requires Const&& convertible_to<iterator_t<V>, iterator_t</*Base*/>>; constexprconst iterator_t</*Base*/>& base()const&noexcept;constexpr iterator_t</*Base*/> base()&&; constexpr difference_type index()constnoexcept; constexprauto operator*()const{return/*reference-type*/(/*pos_*/,*/*current_*/);} constexpr/*iterator*/& operator++();constexprvoid operator++(int);constexpr/*iterator*/ operator++(int)      requires forward_range</*Base*/>; constexpr/*iterator*/& operator--()      requires bidirectional_range</*Base*/>;constexpr/*iterator*/ operator--(int)      requires bidirectional_range</*Base*/>; constexpr/*iterator*/& operator+=(difference_type x)      requires random_access_range</*Base*/>;constexpr/*iterator*/& operator-=(difference_type x)      requires random_access_range</*Base*/>; constexprauto operator[](difference_type n)const      requires random_access_range</*Base*/>{return/*reference-type*/(/*pos_*/+ n,/*current_*/[n]);} friendconstexprbool operator==(const/*iterator*/& x,const/*iterator*/& y)noexcept;friendconstexpr strong_ordering operator<=>(const/*iterator*/& x,const/*iterator*/& y)noexcept; friendconstexpr/*iterator*/ operator+(const/*iterator*/& x, difference_type y)      requires random_access_range</*Base*/>;friendconstexpr/*iterator*/ operator+(difference_type x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexpr/*iterator*/ operator-(const/*iterator*/& x, difference_type y)      requires random_access_range</*Base*/>;friendconstexpr difference_type operator-(const/*iterator*/& x,const/*iterator*/& y)noexcept; friendconstexprauto iter_move(const/*iterator*/& i)noexcept(noexcept(ranges::iter_move(i./*current_*/))&&      is_nothrow_move_constructible_v<range_rvalue_reference_t</*Base*/>>){return tuple<difference_type, range_rvalue_reference_t</*Base*/>>(        i./*pos_*/,ranges::iter_move(i./*current_*/));}};}

      [edit]Class templatestd::ranges::enumerate_view::sentinel

      namespace std::ranges{template<view V>    requires/*range-with-movable-references*/<V>template<bool Const>class enumerate_view<V>::/*sentinel*/{using/*Base*/=/*maybe-const*/<Const, V>;// exposition-only    sentinel_t</*Base*/>/*end_*/= sentinel_t</*Base*/>();// exposition-onlyconstexprexplicit/*sentinel*/(sentinel_t</*Base*/> end);// exposition-only public:/*sentinel*/()=default;constexpr/*sentinel*/(/*sentinel*/<!Const> other)      requires Const&& convertible_to<sentinel_t<V>, sentinel_t</*Base*/>>; constexpr sentinel_t</*Base*/> base()const; template<bool OtherConst>      requires sentinel_for<sentinel_t</*Base*/>,                            iterator_t</*maybe-const*/<OtherConst, V>>>friendconstexprbool operator==(const/*iterator*/<OtherConst>& x,const/*sentinel*/& y); template<bool OtherConst>      requires sized_sentinel_for<sentinel_t</*Base*/>,                                  iterator_t</*maybe-const*/<OtherConst, V>>>friendconstexpr range_difference_t</*maybe-const*/<OtherConst, V>> operator-(const/*iterator*/<OtherConst>& x,const/*sentinel*/& y); template<bool OtherConst>      requires sized_sentinel_for<sentinel_t</*Base*/>,                                  iterator_t</*maybe-const*/<OtherConst, V>>>friendconstexpr range_difference_t</*maybe-const*/<OtherConst, V>> operator-(const/*sentinel*/& x,const/*iterator*/<OtherConst>& y);};}

      [edit]Class templatestd::ranges::zip_view

      namespace std::ranges{template<class...Rs>  concept/*zip-is-common*/=// exposition-only(sizeof...(Rs)==1&&(common_range<Rs>&& ...))||(!(bidirectional_range<Rs>&& ...)&&(common_range<Rs>&& ...))||((random_access_range<Rs>&& ...)&&(sized_range<Rs>&& ...)); template<input_range...Views>    requires(view<Views>&& ...)&&(sizeof...(Views)>0)class zip_view:public view_interface<zip_view<Views...>>{    tuple<Views...>/*views_*/;// exposition-only // class template zip_view::iteratortemplate<bool>class/*iterator*/;// exposition-only // class template zip_view::sentineltemplate<bool>class/*sentinel*/;// exposition-only public:    zip_view()=default;constexprexplicit zip_view(Views...views); constexprauto begin()      requires(!(/*simple-view*/<Views>&& ...)){return/*iterator*/<false>(/*tuple-transform*/(ranges::begin,/*views_*/));}constexprauto begin()const      requires(range<const Views>&& ...){return/*iterator*/<true>(/*tuple-transform*/(ranges::begin,/*views_*/));} constexprauto end()      requires(!(/*simple-view*/<Views>&& ...)){ifconstexpr(!/*zip-is-common*/<Views...>){return/*sentinel*/<false>(/*tuple-transform*/(ranges::end,/*views_*/));}elseifconstexpr((random_access_range<Views>&& ...)){return begin()+ iter_difference_t</*iterator*/<false>>(size());}else{return/*iterator*/<false>(/*tuple-transform*/(ranges::end,/*views_*/));}} constexprauto end()const      requires(range<const Views>&& ...){ifconstexpr(!/*zip-is-common*/<const Views...>){return/*sentinel*/<true>(/*tuple-transform*/(ranges::end,/*views_*/));}elseifconstexpr((random_access_range<const Views>&& ...)){return begin()+ iter_difference_t</*iterator*/<true>>(size());}else{return/*iterator*/<true>(/*tuple-transform*/(ranges::end,/*views_*/));}} constexprauto size()      requires(sized_range<Views>&& ...);constexprauto size()const      requires(sized_range<const Views>&& ...);}; template<class...Rs>  zip_view(Rs&&...)-> zip_view<views::all_t<Rs>...>;}

      [edit]Class templatestd::ranges::zip_view::iterator

      namespace std::ranges{template<input_range...Views>    requires(view<Views>&& ...)&&(sizeof...(Views)>0)template<bool Const>class zip_view<Views...>::/*iterator*/{    tuple<iterator_t</*maybe-const*/<Const, Views>>...>/*current_*/;// exposition-onlyconstexprexplicit/*iterator*/(tuple<iterator_t</*maybe-const*/<Const, Views>>...>);// exposition-onlypublic:using iterator_category= input_iterator_tag;// not always presentusing iterator_concept=/* see description */;using value_type= tuple<range_value_t</*maybe-const*/<Const, Views>>...>;using difference_type=      common_type_t<range_difference_t</*maybe-const*/<Const, Views>>...>; /*iterator*/()=default;constexpr/*iterator*/(/*iterator*/<!Const> i)      requires Const&&(convertible_to<iterator_t<Views>, iterator_t<const Views>>&& ...); constexprauto operator*()const;constexpr/*iterator*/& operator++();constexprvoid operator++(int);constexpr/*iterator*/ operator++(int)      requires/*all-forward*/<Const, Views...>; constexpr/*iterator*/& operator--()      requires/*all-bidirectional*/<Const, Views...>;constexpr/*iterator*/ operator--(int)      requires/*all-bidirectional*/<Const, Views...>; constexpr/*iterator*/& operator+=(difference_type x)      requires/*all-random-access*/<Const, Views...>;constexpr/*iterator*/& operator-=(difference_type x)      requires/*all-random-access*/<Const, Views...>; constexprauto operator[](difference_type n)const      requires/*all-random-access*/<Const, Views...>; friendconstexprbool operator==(const/*iterator*/& x,const/*iterator*/& y)      requires(equality_comparable<iterator_t</*maybe-const*/<Const, Views>>>&& ...); friendconstexprauto operator<=>(const/*iterator*/& x,const/*iterator*/& y)      requires/*all-random-access*/<Const, Views...>; friendconstexpr/*iterator*/ operator+(const/*iterator*/& i, difference_type n)      requires/*all-random-access*/<Const, Views...>;friendconstexpr/*iterator*/ operator+(difference_type n,const/*iterator*/& i)      requires/*all-random-access*/<Const, Views...>;friendconstexpr/*iterator*/ operator-(const/*iterator*/& i, difference_type n)      requires/*all-random-access*/<Const, Views...>;friendconstexpr difference_type operator-(const/*iterator*/& x,const/*iterator*/& y)      requires(sized_sentinel_for<iterator_t</*maybe-const*/<Const, Views>>,                                  iterator_t</*maybe-const*/<Const, Views>>>&&               ...); friendconstexprauto iter_move(const/*iterator*/& i)noexcept(/* see description */); friendconstexprvoid iter_swap(const/*iterator*/& l,const/*iterator*/& r)noexcept(/* see description */)      requires(indirectly_swappable<iterator_t</*maybe-const*/<Const, Views>>>&& ...);};}

      [edit]Class templatestd::ranges::zip_view::sentinel

      namespace std::ranges{template<input_range...Views>    requires(view<Views>&& ...)&&(sizeof...(Views)>0)template<bool Const>class zip_view<Views...>::/*sentinel*/{    tuple<sentinel_t</*maybe-const*/<Const, Views>>...>/*end_*/;// exposition-onlyconstexprexplicit/*sentinel*/(      tuple<sentinel_t</*maybe-const*/<Const, Views>>...> end);// exposition-onlypublic:/*sentinel*/()=default;constexpr/*sentinel*/(/*sentinel*/<!Const> i)      requires Const&&(convertible_to<sentinel_t<Views>, sentinel_t<const Views>>&& ...); template<bool OtherConst>      requires(sentinel_for<sentinel_t</*maybe-const*/<Const, Views>>,                            iterator_t</*maybe-const*/<OtherConst, Views>>>&&               ...)friendconstexprbool operator==(const/*iterator*/<OtherConst>& x,const/*sentinel*/& y); template<bool OtherConst>      requires(sized_sentinel_for<sentinel_t</*maybe-const*/<Const, Views>>,                                  iterator_t</*maybe-const*/<OtherConst, Views>>>&&               ...)friendconstexpr common_type_t<      range_difference_t</*maybe-const*/<OtherConst, Views>>...>    operator-(const/*iterator*/<OtherConst>& x,const/*sentinel*/& y); template<bool OtherConst>      requires(sized_sentinel_for<sentinel_t</*maybe-const*/<Const, Views>>,                                  iterator_t</*maybe-const*/<OtherConst, Views>>>&&               ...)friendconstexpr common_type_t<      range_difference_t</*maybe-const*/<OtherConst, Views>>...>    operator-(const/*sentinel*/& y,const/*iterator*/<OtherConst>& x);};}

      [edit]Class templatestd::ranges::zip_transform_view

      namespace std::ranges{template<move_constructible F, input_range...Views>    requires(view<Views>&& ...)&&(sizeof...(Views)>0)&& is_object_v<F>&&            regular_invocable<F&, range_reference_t<Views>...>&&/*can-reference*/<invoke_result_t<F&, range_reference_t<Views>...>>class zip_transform_view:public view_interface<zip_transform_view<F, Views...>>{/*movable-box*/<F>/*fun_*/;// exposition-only    zip_view<Views...>/*zip_*/;// exposition-only using/*InnerView*/= zip_view<Views...>;// exposition-onlytemplate<bool Const>using/*ziperator*/=      iterator_t</*maybe-const*/<Const,/*InnerView*/>>;// exposition-onlytemplate<bool Const>using/*zentinel*/=      sentinel_t</*maybe-const*/<Const,/*InnerView*/>>;// exposition-only // class template zip_transform_view::iteratortemplate<bool>class/*iterator*/;// exposition-only // class template zip_transform_view::sentineltemplate<bool>class/*sentinel*/;// exposition-only public:    zip_transform_view()=default; constexprexplicit zip_transform_view(F fun, Views...views); constexprauto begin(){return/*iterator*/<false>(*this,/*zip_*/.begin());} constexprauto begin()const      requires range<const/*InnerView*/>&&               regular_invocable<const F&, range_reference_t<const Views>...>{return/*iterator*/<true>(*this,/*zip_*/.begin());} constexprauto end(){ifconstexpr(common_range</*InnerView*/>){return/*iterator*/<false>(*this,/*zip_*/.end());}else{return/*sentinel*/<false>(/*zip_*/.end());}} constexprauto end()const      requires range<const/*InnerView*/>&&               regular_invocable<const F&, range_reference_t<const Views>...>{ifconstexpr(common_range<const/*InnerView*/>){return/*iterator*/<true>(*this,/*zip_*/.end());}else{return/*sentinel*/<true>(/*zip_*/.end());}} constexprauto size()      requires sized_range</*InnerView*/>{return/*zip_*/.size();} constexprauto size()const      requires sized_range<const/*InnerView*/>{return/*zip_*/.size();}}; template<class F,class...Rs>  zip_transform_view(F, Rs&&...)-> zip_transform_view<F,views::all_t<Rs>...>;}

      [edit]Class templatestd::ranges::zip_transform_view::iterator

      namespace std::ranges{template<move_constructible F, input_range...Views>    requires(view<Views>&& ...)&&(sizeof...(Views)>0)&& is_object_v<F>&&            regular_invocable<F&, range_reference_t<Views>...>&&/*can-reference*/<invoke_result_t<F&, range_reference_t<Views>...>>template<bool Const>class zip_transform_view<F, Views...>::/*iterator*/{using/*Parent*/=/*maybe-const*/<Const, zip_transform_view>;// exposition-onlyusing/*Base*/=/*maybe-const*/<Const,/*InnerView*/>;// exposition-only/*Parent*/*/*parent_*/= nullptr;// exposition-only/*ziperator*/<Const>/*inner_*/;// exposition-only constexpr/*iterator*/(/*Parent*/& parent,/*ziperator*/<Const> inner);// exposition-only public:using iterator_category=/* see description */;// not always presentusing iterator_concept=typename/*ziperator*/<Const>::iterator_concept;using value_type= remove_cvref_t<      invoke_result_t</*maybe-const*/<Const, F>&,                      range_reference_t</*maybe-const*/<Const, Views>>...>>;using difference_type= range_difference_t</*Base*/>; /*iterator*/()=default;constexpr/*iterator*/(/*iterator*/<!Const> i)      requires Const&& convertible_to</*ziperator*/<false>,/*ziperator*/<Const>>; constexpr decltype(auto) operator*()constnoexcept(/* see description */);constexpr/*iterator*/& operator++();constexprvoid operator++(int);constexpr/*iterator*/ operator++(int)      requires forward_range</*Base*/>; constexpr/*iterator*/& operator--()      requires bidirectional_range</*Base*/>;constexpr/*iterator*/ operator--(int)      requires bidirectional_range</*Base*/>; constexpr/*iterator*/& operator+=(difference_type x)      requires random_access_range</*Base*/>;constexpr/*iterator*/& operator-=(difference_type x)      requires random_access_range</*Base*/>; constexpr decltype(auto) operator[](difference_type n)const      requires random_access_range</*Base*/>; friendconstexprbool operator==(const/*iterator*/& x,const/*iterator*/& y)      requires equality_comparable</*ziperator*/<Const>>; friendconstexprauto operator<=>(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>; friendconstexpr/*iterator*/ operator+(const/*iterator*/& i, difference_type n)      requires random_access_range</*Base*/>;friendconstexpr/*iterator*/ operator+(difference_type n,const/*iterator*/& i)      requires random_access_range</*Base*/>;friendconstexpr/*iterator*/ operator-(const/*iterator*/& i, difference_type n)      requires random_access_range</*Base*/>;friendconstexpr difference_type operator-(const/*iterator*/& x,const/*iterator*/& y)      requires sized_sentinel_for</*ziperator*/<Const>,/*ziperator*/<Const>>;};}

      [edit]Class templatestd::ranges::zip_transform_view::sentinel

      namespace std::ranges{template<move_constructible F, input_range...Views>    requires(view<Views>&& ...)&&(sizeof...(Views)>0)&& is_object_v<F>&&            regular_invocable<F&, range_reference_t<Views>...>&&/*can-reference*/<invoke_result_t<F&, range_reference_t<Views>...>>template<bool Const>class zip_transform_view<F, Views...>::/*sentinel*/{/*zentinel*/<Const>/*inner_*/;// exposition-onlyconstexprexplicit/*sentinel*/(/*zentinel*/<Const> inner);// exposition-only public:/*sentinel*/()=default;constexpr/*sentinel*/(/*sentinel*/<!Const> i)      requires Const&& convertible_to</*zentinel*/<false>,/*zentinel*/<Const>>; template<bool OtherConst>      requires sentinel_for</*zentinel*/<Const>,/*ziperator*/<OtherConst>>friendconstexprbool operator==(const/*iterator*/<OtherConst>& x,const/*sentinel*/& y); template<bool OtherConst>      requires sized_sentinel_for</*zentinel*/<Const>,/*ziperator*/<OtherConst>>friendconstexpr range_difference_t</*maybe-const*/<OtherConst,/*InnerView*/>>    operator-(const/*iterator*/<OtherConst>& x,const/*sentinel*/& y); template<bool OtherConst>      requires sized_sentinel_for</*zentinel*/<Const>,/*ziperator*/<OtherConst>>friendconstexpr range_difference_t</*maybe-const*/<OtherConst,/*InnerView*/>>    operator-(const/*sentinel*/& x,const/*iterator*/<OtherConst>& y);};}

      [edit]Class templatestd::ranges::adjacent_view

      namespace std::ranges{template<forward_range V, size_t N>    requires view<V>&&(N>0)class adjacent_view:public view_interface<adjacent_view<V, N>>{    V/*base_*/= V();// exposition-only // class template adjacent_view::iteratortemplate<bool>class/*iterator*/;// exposition-only // class template adjacent_view::sentineltemplate<bool>class/*sentinel*/;// exposition-only struct/*as-sentinel*/{};// exposition-only public:    adjacent_view()      requires default_initializable<V>=default;constexprexplicit adjacent_view(V base); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexprauto begin()      requires(!/*simple-view*/<V>){return/*iterator*/<false>(ranges::begin(/*base_*/),ranges::end(/*base_*/));} constexprauto begin()const      requires range<const V>{return/*iterator*/<true>(ranges::begin(/*base_*/),ranges::end(/*base_*/));} constexprauto end()      requires(!/*simple-view*/<V>){ifconstexpr(common_range<V>){return/*iterator*/<false>(/*as-sentinel*/{},ranges::begin(/*base_*/),ranges::end(/*base_*/));}else{return/*sentinel*/<false>(ranges::end(/*base_*/));}} constexprauto end()const      requires range<const V>{ifconstexpr(common_range<const V>){return/*iterator*/<true>(/*as-sentinel*/{},ranges::begin(/*base_*/),ranges::end(/*base_*/));}else{return/*sentinel*/<true>(ranges::end(/*base_*/));}} constexprauto size()      requires sized_range<V>;constexprauto size()const      requires sized_range<const V>; constexprauto reserve_hint()      requires approximately_sized_range<V>;constexprauto reserve_hint()const      requires approximately_sized_range<const V>;};}

      [edit]Class templatestd::ranges::adjacent_view::iterator

      namespace std::ranges{template<forward_range V, size_t N>    requires view<V>&&(N>0)template<bool Const>class adjacent_view<V, N>::/*iterator*/{using/*Base*/=/*maybe-const*/<Const, V>;// exposition-only    array<iterator_t</*Base*/>, N>/*current_*/=      array<iterator_t</*Base*/>, N>();// exposition-onlyconstexpr/*iterator*/(iterator_t</*Base*/> first,                           sentinel_t</*Base*/> last);// exposition-onlyconstexpr/*iterator*/(/*as-sentinel*/,                           iterator_t</*Base*/> first,                           iterator_t</*Base*/> last);// exposition-onlypublic:using iterator_category= input_iterator_tag;using iterator_concept=/* see description */;using value_type= tuple</*REPEAT*/(range_value_t</*Base*/>, N)...>;using difference_type= range_difference_t</*Base*/>; /*iterator*/()=default;constexpr/*iterator*/(/*iterator*/<!Const> i)      requires Const&& convertible_to<iterator_t<V>, iterator_t</*Base*/>>; constexprauto operator*()const;constexpr/*iterator*/& operator++();constexpr/*iterator*/ operator++(int); constexpr/*iterator*/& operator--()      requires bidirectional_range</*Base*/>;constexpr/*iterator*/ operator--(int)      requires bidirectional_range</*Base*/>; constexpr/*iterator*/& operator+=(difference_type x)      requires random_access_range</*Base*/>;constexpr/*iterator*/& operator-=(difference_type x)      requires random_access_range</*Base*/>; constexprauto operator[](difference_type n)const      requires random_access_range</*Base*/>; friendconstexprbool operator==(const/*iterator*/& x,const/*iterator*/& y);friendconstexprbool operator<(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprbool operator>(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprbool operator<=(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprbool operator>=(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprauto operator<=>(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>&& three_way_comparable<iterator_t</*Base*/>>; friendconstexpr/*iterator*/ operator+(const/*iterator*/& i, difference_type n)      requires random_access_range</*Base*/>;friendconstexpr/*iterator*/ operator+(difference_type n,const/*iterator*/& i)      requires random_access_range</*Base*/>;friendconstexpr/*iterator*/ operator-(const/*iterator*/& i, difference_type n)      requires random_access_range</*Base*/>;friendconstexpr difference_type operator-(const/*iterator*/& x,const/*iterator*/& y)      requires sized_sentinel_for<iterator_t</*Base*/>, iterator_t</*Base*/>>; friendconstexprauto iter_move(const/*iterator*/& i)noexcept(/* see description */);friendconstexprvoid iter_swap(const/*iterator*/& l,const/*iterator*/& r)noexcept(/* see description */)      requires indirectly_swappable<iterator_t</*Base*/>>;};}

      [edit]Class templatestd::ranges::adjacent_view::sentinel

      namespace std::ranges{template<forward_range V, size_t N>    requires view<V>&&(N>0)template<bool Const>class adjacent_view<V, N>::/*sentinel*/{using/*Base*/=/*maybe-const*/<Const, V>;// exposition-only    sentinel_t</*Base*/>/*end_*/= sentinel_t</*Base*/>();// exposition-onlyconstexprexplicit/*sentinel*/(sentinel_t</*Base*/> end);// exposition-only public:/*sentinel*/()=default;constexpr/*sentinel*/(/*sentinel*/<!Const> i)      requires Const&& convertible_to<sentinel_t<V>, sentinel_t</*Base*/>>; template<bool OtherConst>      requires sentinel_for<sentinel_t</*Base*/>,                            iterator_t</*maybe-const*/<OtherConst, V>>>friendconstexprbool operator==(const/*iterator*/<OtherConst>& x,const/*sentinel*/& y); template<bool OtherConst>      requires sized_sentinel_for<sentinel_t</*Base*/>,                                  iterator_t</*maybe-const*/<OtherConst, V>>>friendconstexpr range_difference_t</*maybe-const*/<OtherConst, V>> operator-(const/*iterator*/<OtherConst>& x,const/*sentinel*/& y); template<bool OtherConst>      requires sized_sentinel_for<sentinel_t</*Base*/>,                                  iterator_t</*maybe-const*/<OtherConst, V>>>friendconstexpr range_difference_t</*maybe-const*/<OtherConst, V>> operator-(const/*sentinel*/& y,const/*iterator*/<OtherConst>& x);};}

      [edit]Class templatestd::ranges::adjacent_transform_view

      namespace std::ranges{template<forward_range V, move_constructible F, size_t N>    requires view<V>&&(N>0)&& is_object_v<F>&&             regular_invocable<F&,/*REPEAT*/(range_reference_t<V>, N)...>&&/*can-reference*/<               invoke_result_t<F&,/*REPEAT*/(range_reference_t<V>, N)...>>class adjacent_transform_view:public view_interface<adjacent_transform_view<V, F, N>>{/*movable-box*/<F>/*fun_*/;// exposition-only    adjacent_view<V, N>/*inner_*/;// exposition-only using/*InnerView*/= adjacent_view<V, N>;// exposition-onlytemplate<bool Const>using/*inner-iterator*/=      iterator_t</*maybe-const*/<Const,/*InnerView*/>>;// exposition-onlytemplate<bool Const>using/*inner-sentinel*/=      sentinel_t</*maybe-const*/<Const,/*InnerView*/>>;// exposition-only // class template adjacent_transform_view::iteratortemplate<bool>class/*iterator*/;// exposition-only // class template adjacent_transform_view::sentineltemplate<bool>class/*sentinel*/;// exposition-only public:    adjacent_transform_view()=default;constexprexplicit adjacent_transform_view(V base, F fun); constexpr V base()const&      requires copy_constructible<V>{return/*inner_*/.base();}constexpr V base()&&{return std::move(/*inner_*/).base();} constexprauto begin(){return/*iterator*/<false>(*this,/*inner_*/.begin());} constexprauto begin()const      requires range<const/*InnerView*/>&&               regular_invocable<const F&,/*REPEAT*/(range_reference_t<const V>, N)...>{return/*iterator*/<true>(*this,/*inner_*/.begin());} constexprauto end(){ifconstexpr(common_range</*InnerView*/>){return/*iterator*/<false>(*this,/*inner_*/.end());}else{return/*sentinel*/<false>(/*inner_*/.end());}} constexprauto end()const      requires range<const/*InnerView*/>&&               regular_invocable<const F&,/*REPEAT*/(range_reference_t<const V>, N)...>{ifconstexpr(common_range<const/*InnerView*/>){return/*iterator*/<true>(*this,/*inner_*/.end());}else{return/*sentinel*/<true>(/*inner_*/.end());}} constexprauto size()      requires sized_range</*InnerView*/>{return/*inner_*/.size();} constexprauto size()const      requires sized_range<const/*InnerView*/>{return/*inner_*/.size();} constexprauto reserve_hint()      requires approximately_sized_range</*InnerView*/>{return/*inner_*/.reserve_hint();} constexprauto reserve_hint()const      requires approximately_sized_range<const/*InnerView*/>{return/*inner_*/.reserve_hint();}};}

      [edit]Class templatestd::ranges::adjacent_transform_view::iterator

      namespace std::ranges{template<forward_range V, move_constructible F, size_t N>    requires view<V>&&(N>0)&& is_object_v<F>&&             regular_invocable<F&,/*REPEAT*/(range_reference_t<V>, N)...>&&/*can-reference*/<               invoke_result_t<F&,/*REPEAT*/(range_reference_t<V>, N)...>>template<bool Const>class adjacent_transform_view<V, F, N>::/*iterator*/{using/*Parent*/=/*maybe-const*/<Const, adjacent_transform_view>;// exposition-onlyusing/*Base*/=/*maybe-const*/<Const, V>;// exposition-only/*Parent*/*/*parent_*/= nullptr;// exposition-only/*inner-iterator*/<Const>/*inner_*/;// exposition-only constexpr/*iterator*/(/*Parent*/& parent,/*inner-iterator*/<Const> inner);// exposition-only public:using iterator_category=/* see description */;using iterator_concept=typename/*inner-iterator*/<Const>::iterator_concept;using value_type=      remove_cvref_t<invoke_result_t</*maybe-const*/<Const, F>&,/*REPEAT*/(range_reference_t</*Base*/>, N)...>>;using difference_type= range_difference_t</*Base*/>; /*iterator*/()=default;constexpr/*iterator*/(/*iterator*/<!Const> i)      requires Const&& convertible_to</*inner-iterator*/<false>,/*inner-iterator*/<Const>>; constexpr decltype(auto) operator*()constnoexcept(/* see description */);constexpr/*iterator*/& operator++();constexpr/*iterator*/ operator++(int);constexpr/*iterator*/& operator--()      requires bidirectional_range</*Base*/>;constexpr/*iterator*/ operator--(int)      requires bidirectional_range</*Base*/>;constexpr/*iterator*/& operator+=(difference_type x)      requires random_access_range</*Base*/>;constexpr/*iterator*/& operator-=(difference_type x)      requires random_access_range</*Base*/>; constexpr decltype(auto) operator[](difference_type n)const      requires random_access_range</*Base*/>; friendconstexprbool operator==(const/*iterator*/& x,const/*iterator*/& y);friendconstexprbool operator<(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprbool operator>(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprbool operator<=(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprbool operator>=(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprauto operator<=>(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>&&               three_way_comparable</*inner-iterator*/<Const>>; friendconstexpr/*iterator*/ operator+(const/*iterator*/& i, difference_type n)      requires random_access_range</*Base*/>;friendconstexpr/*iterator*/ operator+(difference_type n,const/*iterator*/& i)      requires random_access_range</*Base*/>;friendconstexpr/*iterator*/ operator-(const/*iterator*/& i, difference_type n)      requires random_access_range</*Base*/>;friendconstexpr difference_type operator-(const/*iterator*/& x,const/*iterator*/& y)      requires sized_sentinel_for</*inner-iterator*/<Const>,/*inner-iterator*/<Const>>;};}

      [edit]Class templatestd::ranges::adjacent_transform_view::sentinel

      namespace std::ranges{template<forward_range V, move_constructible F, size_t N>    requires view<V>&&(N>0)&& is_object_v<F>&&             regular_invocable<F&,/*REPEAT*/(range_reference_t<V>, N)...>&&/*can-reference*/<               invoke_result_t<F&,/*REPEAT*/(range_reference_t<V>, N)...>>template<bool Const>class adjacent_transform_view<V, F, N>::/*sentinel*/{/*inner-sentinel*/<Const>/*inner_*/;// exposition-onlyconstexprexplicit/*sentinel*/(/*inner-sentinel*/<Const> inner);// exposition-only public:/*sentinel*/()=default;constexpr/*sentinel*/(/*sentinel*/<!Const> i)      requires Const&& convertible_to</*inner-sentinel*/<false>,/*inner-sentinel*/<Const>>; template<bool OtherConst>      requires sentinel_for</*inner-sentinel*/<Const>,/*inner-iterator*/<OtherConst>>friendconstexprbool operator==(const/*iterator*/<OtherConst>& x,const/*sentinel*/& y); template<bool OtherConst>      requires sized_sentinel_for</*inner-sentinel*/<Const>,/*inner-iterator*/<OtherConst>>friendconstexpr range_difference_t</*maybe-const*/<OtherConst,/*InnerView*/>>    operator-(const/*iterator*/<OtherConst>& x,const/*sentinel*/& y); template<bool OtherConst>      requires sized_sentinel_for</*inner-sentinel*/<Const>,/*inner-iterator*/<OtherConst>>friendconstexpr range_difference_t</*maybe-const*/<OtherConst,/*InnerView*/>>    operator-(const/*sentinel*/& x,const/*iterator*/<OtherConst>& y);};}

      [edit]Class templatestd::ranges::chunk_view forinput_ranges

      namespace std::ranges{template<class I>constexpr I/*div-ceil*/(I num, I denom){// exposition-only    I r= num/ denom;if(num% denom)++r;return r;} template<view V>    requires input_range<V>class chunk_view:public view_interface<chunk_view<V>>{    V/*base_*/;// exposition-only    range_difference_t<V>/*n_*/;// exposition-only    range_difference_t<V>/*remainder_*/=0;// exposition-only /*non-propagating-cache*/<iterator_t<V>>/*current_*/;// exposition-only // class chunk_view::outer-iteratorclass/*outer-iterator*/;// exposition-only // class chunk_view::inner-iteratorclass/*inner-iterator*/;// exposition-only public:constexprexplicit chunk_view(V base, range_difference_t<V> n); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexpr/*outer-iterator*/ begin();constexpr default_sentinel_t end()constnoexcept; constexprauto size()      requires sized_range<V>;constexprauto size()const      requires sized_range<const V>; constexprauto reserve_hint()      requires approximately_sized_range<V>;constexprauto reserve_hint()const      requires approximately_sized_range<const V>;}; template<class R>  chunk_view(R&&, range_difference_t<R>)-> chunk_view<views::all_t<R>>;}

      [edit]Class templatestd::ranges::chunk_view::outer_iterator forinput_ranges

      namespace std::ranges{template<view V>    requires input_range<V>class chunk_view<V>::/*outer-iterator*/{    chunk_view*/*parent_*/;// exposition-only constexprexplicit/*outer-iterator*/(chunk_view& parent);// exposition-only public:using iterator_concept= input_iterator_tag;using difference_type= range_difference_t<V>; // class chunk_view::outer-iterator::value_typestruct value_type; /*outer-iterator*/(/*outer-iterator*/&&)=default;/*outer-iterator*/& operator=(/*outer-iterator*/&&)=default; constexpr value_type operator*()const;constexpr/*outer-iterator*/& operator++();constexprvoid operator++(int); friendconstexprbool operator==(const/*outer-iterator*/& x, default_sentinel_t); friendconstexpr difference_type operator-(default_sentinel_t y,const/*outer-iterator*/& x)      requires sized_sentinel_for<sentinel_t<V>, iterator_t<V>>;friendconstexpr difference_type operator-(const/*outer-iterator*/& x,                                               default_sentinel_t y)      requires sized_sentinel_for<sentinel_t<V>, iterator_t<V>>;};}

      [edit]Class templatestd::ranges::chunk_view::outer_iterator::value_type forinput_ranges

      namespace std::ranges{template<view V>    requires input_range<V>struct chunk_view<V>::/*outer-iterator*/::value_type: view_interface<value_type>{private:    chunk_view*/*parent_*/;// exposition-only constexprexplicit value_type(chunk_view& parent);// exposition-only public:constexpr/*inner-iterator*/ begin()constnoexcept;constexpr default_sentinel_t end()constnoexcept; constexprauto size()const      requires sized_sentinel_for<sentinel_t<V>, iterator_t<V>>;};}

      [edit]Class templatestd::ranges::chunk_view::inner_iterator forinput_ranges

      namespace std::ranges{template<view V>    requires input_range<V>class chunk_view<V>::/*inner-iterator*/{    chunk_view*/*parent_*/;// exposition-only constexprexplicit/*inner-iterator*/(chunk_view& parent)noexcept;// exposition-only public:using iterator_concept= input_iterator_tag;using difference_type= range_difference_t<V>;using value_type= range_value_t<V>; /*inner-iterator*/(/*inner-iterator*/&&)=default;/*inner-iterator*/& operator=(/*inner-iterator*/&&)=default; constexprconst iterator_t<V>& base()const&; constexpr range_reference_t<V> operator*()const;constexpr/*inner-iterator*/& operator++();constexprvoid operator++(int); friendconstexprbool operator==(const/*inner-iterator*/& x, default_sentinel_t); friendconstexpr difference_type operator-(default_sentinel_t y,const/*inner-iterator*/& x)      requires sized_sentinel_for<sentinel_t<V>, iterator_t<V>>;friendconstexpr difference_type operator-(const/*inner-iterator*/& x,                                               default_sentinel_t y)      requires sized_sentinel_for<sentinel_t<V>, iterator_t<V>>; friendconstexpr range_rvalue_reference_t<V>    iter_move(const/*inner-iterator*/& i)noexcept(noexcept(ranges::iter_move(*i./*parent_*/->/*current_*/))); friendconstexprvoid    iter_swap(const/*inner-iterator*/& x,const/*inner-iterator*/& y)noexcept(noexcept(ranges::iter_swap(*x./*parent_*/->/*current_*/,*y./*parent_*/->/*current_*/)))      requires indirectly_swappable<iterator_t<V>>;};}

      [edit]Class templatestd::ranges::chunk_view forforward_ranges

      namespace std::ranges{template<view V>    requires forward_range<V>class chunk_view<V>:public view_interface<chunk_view<V>>{    V/*base_*/;// exposition-only    range_difference_t<V>/*n_*/;// exposition-only // class template chunk_view::iteratortemplate<bool>class/*iterator*/;// exposition-only public:constexprexplicit chunk_view(V base, range_difference_t<V> n); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexprauto begin()      requires(!/*simple-view*/<V>){return/*iterator*/<false>(this,ranges::begin(/*base_*/));} constexprauto begin()const      requires forward_range<const V>{return/*iterator*/<true>(this,ranges::begin(/*base_*/));} constexprauto end()      requires(!/*simple-view*/<V>){ifconstexpr(common_range<V>&& sized_range<V>){auto missing=(/*n_*/-ranges::distance(/*base_*/)%/*n_*/)%/*n_*/;return/*iterator*/<false>(this,ranges::end(/*base_*/), missing);}elseifconstexpr(common_range<V>&&!bidirectional_range<V>){return/*iterator*/<false>(this,ranges::end(/*base_*/));}else{return default_sentinel;}} constexprauto end()const      requires forward_range<const V>{ifconstexpr(common_range<const V>&& sized_range<const V>){auto missing=(/*n_*/-ranges::distance(/*base_*/)%/*n_*/)%/*n_*/;return/*iterator*/<true>(this,ranges::end(/*base_*/), missing);}elseifconstexpr(common_range<const V>&&!bidirectional_range<const V>){return/*iterator*/<true>(this,ranges::end(/*base_*/));}else{return default_sentinel;}} constexprauto size()      requires sized_range<V>;constexprauto size()const      requires sized_range<const V>; constexprauto reserve_hint()      requires approximately_sized_range<V>;constexprauto reserve_hint()const      requires approximately_sized_range<const V>;};}

      [edit]Class templatestd::ranges::chunk_view::iterator forforward_ranges

      namespace std::ranges{template<view V>    requires forward_range<V>template<bool Const>class chunk_view<V>::/*iterator*/{using/*Parent*/=/*maybe-const*/<Const, chunk_view>;// exposition-onlyusing/*Base*/=/*maybe-const*/<Const, V>;// exposition-only     iterator_t</*Base*/>/*current_*/= iterator_t</*Base*/>();// exposition-only    sentinel_t</*Base*/>/*end_*/= sentinel_t</*Base*/>();// exposition-only    range_difference_t</*Base*/>/*n_*/=0;// exposition-only    range_difference_t</*Base*/>/*missing_*/=0;// exposition-only constexpr/*iterator*/(/*Parent*/* parent,                           iterator_t</*Base*/> current,// exposition-only                           range_difference_t</*Base*/> missing=0); public:using iterator_category= input_iterator_tag;using iterator_concept=/* see description */;using value_type= decltype(views::take(subrange(/*current_*/,/*end_*/),/*n_*/));using difference_type= range_difference_t</*Base*/>; /*iterator*/()=default;constexpr/*iterator*/(/*iterator*/<!Const> i)      requires Const&& convertible_to<iterator_t<V>, iterator_t</*Base*/>>&&               convertible_to<sentinel_t<V>, sentinel_t</*Base*/>>; constexpr iterator_t</*Base*/> base()const; constexpr value_type operator*()const;constexpr/*iterator*/& operator++();constexpr/*iterator*/ operator++(int); constexpr/*iterator*/& operator--()      requires bidirectional_range</*Base*/>;constexpr/*iterator*/ operator--(int)      requires bidirectional_range</*Base*/>; constexpr/*iterator*/& operator+=(difference_type x)      requires random_access_range</*Base*/>;constexpr/*iterator*/& operator-=(difference_type x)      requires random_access_range</*Base*/>; constexpr value_type operator[](difference_type n)const      requires random_access_range</*Base*/>; friendconstexprbool operator==(const/*iterator*/& x,const/*iterator*/& y);friendconstexprbool operator==(const/*iterator*/& x, default_sentinel_t); friendconstexprbool operator<(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprbool operator>(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprbool operator<=(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprbool operator>=(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprauto operator<=>(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>&& three_way_comparable<iterator_t</*Base*/>>; friendconstexpr/*iterator*/ operator+(const/*iterator*/& i, difference_type n)      requires random_access_range</*Base*/>;friendconstexpr/*iterator*/ operator+(difference_type n,const/*iterator*/& i)      requires random_access_range</*Base*/>;friendconstexpr/*iterator*/ operator-(const/*iterator*/& i, difference_type n)      requires random_access_range</*Base*/>;friendconstexpr difference_type operator-(const/*iterator*/& x,const/*iterator*/& y)      requires sized_sentinel_for<iterator_t</*Base*/>, iterator_t</*Base*/>>; friendconstexpr difference_type operator-(default_sentinel_t y,const/*iterator*/& x)      requires sized_sentinel_for<sentinel_t</*Base*/>, iterator_t</*Base*/>>;friendconstexpr difference_type operator-(const/*iterator*/& x,                                               default_sentinel_t y)      requires sized_sentinel_for<sentinel_t</*Base*/>, iterator_t</*Base*/>>;};}

      [edit]Class templatestd::ranges::slide_view

      namespace std::ranges{template<class V>  concept/*slide-caches-nothing*/=    random_access_range<V>&& sized_range<V>;// exposition-only template<class V>  concept/*slide-caches-last*/=// exposition-only!/*slide-caches-nothing*/<V>&& bidirectional_range<V>&& common_range<V>; template<class V>  concept/*slide-caches-first*/=// exposition-only!/*slide-caches-nothing*/<V>&&!/*slide-caches-last*/<V>; template<forward_range V>    requires view<V>class slide_view:public view_interface<slide_view<V>>{    V/*base_*/;// exposition-only    range_difference_t<V>/*n_*/;// exposition-only // class template slide_view::iteratortemplate<bool>class/*iterator*/;// exposition-only // class slide_view::sentinelclass/*sentinel*/;// exposition-only public:constexprexplicit slide_view(V base, range_difference_t<V> n); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexprauto begin()      requires(!(/*simple-view*/<V>&&/*slide-caches-nothing*/<const V>));constexprauto begin()const      requires/*slide-caches-nothing*/<const V>; constexprauto end()      requires(!(/*simple-view*/<V>&&/*slide-caches-nothing*/<const V>));constexprauto end()const      requires/*slide-caches-nothing*/<const V>; constexprauto size()      requires sized_range<V>;constexprauto size()const      requires sized_range<const V>; constexprauto reserve_hintsize()      requires approximately_sized_range<V>;constexprauto reserve_hintsize()const      requires approximately_sized_range<const V>;}; template<class R>  slide_view(R&&, range_difference_t<R>)-> slide_view<views::all_t<R>>;}

      [edit]Class templatestd::ranges::slide_view::iterator

      namespace std::ranges{template<forward_range V>    requires view<V>template<bool Const>class slide_view<V>::/*iterator*/{using/*Base*/=/*maybe-const*/<Const, V>;// exposition-only    iterator_t</*Base*/>/*current_*/= iterator_t</*Base*/>();// exposition-only    iterator_t</*Base*/>/*last-ele_*/=      iterator_t</*Base*/>();// exposition-only// present only if Base models slide-caches-first    range_difference_t</*Base*/>/*n_*/=0;// exposition-only constexpr/*iterator*/(iterator_t</*Base*/> current,                           range_difference_t</*Base*/> n)// exposition-only      requires(!/*slide-caches-first*/</*Base*/>); constexpr/*iterator*/(iterator_t</*Base*/> current,                           iterator_t</*Base*/> last_ele,// exposition-only                           range_difference_t</*Base*/> n)      requires/*slide-caches-first*/</*Base*/>; public:using iterator_category= input_iterator_tag;using iterator_concept=/* see description */;using value_type= decltype(views::counted(/*current_*/,/*n_*/));using difference_type= range_difference_t</*Base*/>; /*iterator*/()=default;constexpr/*iterator*/(/*iterator*/<!Const> i)      requires Const&& convertible_to<iterator_t<V>, iterator_t</*Base*/>>; constexprauto operator*()const;constexpr/*iterator*/& operator++();constexpr/*iterator*/ operator++(int); constexpr/*iterator*/& operator--()      requires bidirectional_range</*Base*/>;constexpr/*iterator*/ operator--(int)      requires bidirectional_range</*Base*/>; constexpr/*iterator*/& operator+=(difference_type x)      requires random_access_range</*Base*/>;constexpr/*iterator*/& operator-=(difference_type x)      requires random_access_range</*Base*/>; constexprauto operator[](difference_type n)const      requires random_access_range</*Base*/>; friendconstexprbool operator==(const/*iterator*/& x,const/*iterator*/& y); friendconstexprbool operator<(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprbool operator>(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprbool operator<=(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprbool operator>=(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>;friendconstexprauto operator<=>(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>&& three_way_comparable<iterator_t</*Base*/>>; friendconstexpr/*iterator*/ operator+(const/*iterator*/& i, difference_type n)      requires random_access_range</*Base*/>;friendconstexpr/*iterator*/ operator+(difference_type n,const/*iterator*/& i)      requires random_access_range</*Base*/>;friendconstexpr/*iterator*/ operator-(const/*iterator*/& i, difference_type n)      requires random_access_range</*Base*/>;friendconstexpr difference_type operator-(const/*iterator*/& x,const/*iterator*/& y)      requires sized_sentinel_for<iterator_t</*Base*/>, iterator_t</*Base*/>>;};}

      [edit]Class templatestd::ranges::slide_view::sentinel

      namespace std::ranges{template<forward_range V>    requires view<V>class slide_view<V>::/*sentinel*/{    sentinel_t<V>/*end_*/= sentinel_t<V>();// exposition-onlyconstexprexplicit/*sentinel*/(sentinel_t<V> end);// exposition-only public:/*sentinel*/()=default; friendconstexprbool operator==(const/*iterator*/<false>& x,const/*sentinel*/& y); friendconstexpr range_difference_t<V> operator-(const/*iterator*/<false>& x,const/*sentinel*/& y)      requires sized_sentinel_for<sentinel_t<V>, iterator_t<V>>; friendconstexpr range_difference_t<V> operator-(const/*sentinel*/& y,const/*iterator*/<false>& x)      requires sized_sentinel_for<sentinel_t<V>, iterator_t<V>>;};}

      [edit]Class templatestd::ranges::chunk_by_view

      namespace std::ranges{template<forward_range V, indirect_binary_predicate<iterator_t<V>, iterator_t<V>> Pred>    requires view<V>&& is_object_v<Pred>class chunk_by_view:public view_interface<chunk_by_view<V, Pred>>{    V/*base_*/= V();// exposition-only/*movable-box*/<Pred>/*pred_*/;// exposition-only // class chunk_by_view::iteratorclass/*iterator*/;// exposition-only public:    chunk_by_view()      requires default_initializable<V>&& default_initializable<Pred>=default;constexprexplicit chunk_by_view(V base, Pred pred); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexprconst Pred& pred()const; constexpr/*iterator*/ begin();constexprauto end(); constexpr iterator_t<V>/*find-next*/(iterator_t<V>);// exposition-onlyconstexpr iterator_t<V>/*find-prev*/(iterator_t<V>)// exposition-only      requires bidirectional_range<V>;}; template<class R,class Pred>  chunk_by_view(R&&, Pred)-> chunk_by_view<views::all_t<R>, Pred>;}

      [edit]Class templatestd::ranges::chunk_by_view::iterator

      namespace std::ranges{template<forward_range V, indirect_binary_predicate<iterator_t<V>, iterator_t<V>> Pred>    requires view<V>&& is_object_v<Pred>class chunk_by_view<V, Pred>::/*iterator*/{    chunk_by_view*/*parent_*/= nullptr;// exposition-only    iterator_t<V>/*current_*/= iterator_t<V>();// exposition-only    iterator_t<V>/*next_*/= iterator_t<V>();// exposition-only constexpr/*iterator*/(chunk_by_view& parent,                           iterator_t<V> current,// exposition-only                           iterator_t<V> next); public:using value_type= subrange<iterator_t<V>>;using difference_type= range_difference_t<V>;using iterator_category= input_iterator_tag;using iterator_concept=/* see description */; /*iterator*/()=default; constexpr value_type operator*()const;constexpr/*iterator*/& operator++();constexpr/*iterator*/ operator++(int); constexpr/*iterator*/& operator--()      requires bidirectional_range<V>;constexpr/*iterator*/ operator--(int)      requires bidirectional_range<V>; friendconstexprbool operator==(const/*iterator*/& x,const/*iterator*/& y);friendconstexprbool operator==(const/*iterator*/& x, default_sentinel_t);};}

      [edit]Class templatestd::ranges::stride_view

      namespace std::ranges{template<input_range V>    requires view<V>class stride_view:public view_interface<stride_view<V>>{    V/*base_*/;// exposition-only    range_difference_t<V>/*stride_*/;// exposition-only// class template stride_view::iteratortemplate<bool>class/*iterator*/;// exposition-onlypublic:constexprexplicit stride_view(V base, range_difference_t<V> stride); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexpr range_difference_t<V> stride()constnoexcept; constexprauto begin()      requires(!/*simple-view*/<V>){return/*iterator*/<false>(this,ranges::begin(/*base_*/));} constexprauto begin()const      requires range<const V>{return/*iterator*/<true>(this,ranges::begin(/*base_*/));} constexprauto end()      requires(!/*simple-view*/<V>){ifconstexpr(common_range<V>&& sized_range<V>&& forward_range<V>){auto missing=(/*stride_*/-ranges::distance(/*base_*/)%/*stride_*/)%/*stride_*/;return/*iterator*/<false>(this,ranges::end(/*base_*/), missing);}elseifconstexpr(common_range<V>&&!bidirectional_range<V>){return/*iterator*/<false>(this,ranges::end(/*base_*/));}else{return default_sentinel;}} constexprauto end()const      requires range<const V>{ifconstexpr(common_range<const V>&& sized_range<const V>&&                    forward_range<const V>){auto missing=(/*stride_*/-ranges::distance(/*base_*/)%/*stride_*/)%/*stride_*/;return/*iterator*/<true>(this,ranges::end(/*base_*/), missing);}elseifconstexpr(common_range<const V>&&!bidirectional_range<const V>){return/*iterator*/<true>(this,ranges::end(/*base_*/));}else{return default_sentinel;}} constexprauto size()      requires sized_range<V>;constexprauto size()const      requires sized_range<const V>; constexprauto reserve_hint()      requires approximately_sized_range<V>;constexprauto reserve_hint()const      requires approximately_sized_range<const V>;}; template<class R>  stride_view(R&&, range_difference_t<R>)-> stride_view<views::all_t<R>>;}

      [edit]Class templatestd::ranges::stride_view::iterator

      namespace std::ranges{template<input_range V>    requires view<V>template<bool Const>class stride_view<V>::/*iterator*/{using/*Parent*/=/*maybe-const*/<Const, stride_view>;// exposition-onlyusing/*Base*/=/*maybe-const*/<Const, V>;// exposition-only     iterator_t</*Base*/>/*current_*/= iterator_t</*Base*/>();// exposition-only    sentinel_t</*Base*/>/*end_*/= sentinel_t</*Base*/>();// exposition-only    range_difference_t</*Base*/>/*stride_*/=0;// exposition-only    range_difference_t</*Base*/>/*missing_*/=0;// exposition-only constexpr/*iterator*/(/*Parent*/* parent,                           iterator_t</*Base*/> current,// exposition-only                           range_difference_t</*Base*/> missing=0); public:using difference_type= range_difference_t</*Base*/>;using value_type= range_value_t</*Base*/>;using iterator_concept=/* see description */;using iterator_category=/* see description */;// not always present /*iterator*/()      requires default_initializable<iterator_t</*Base*/>>=default; constexpr/*iterator*/(/*iterator*/<!Const> other)      requires Const&& convertible_to<iterator_t<V>, iterator_t</*Base*/>>&&               convertible_to<sentinel_t<V>, sentinel_t</*Base*/>>; constexpr iterator_t</*Base*/> base()&&;constexprconst iterator_t</*Base*/>& base()const&noexcept; constexpr decltype(auto) operator*()const{return*/*current_*/;} constexpr/*iterator*/& operator++();constexprvoid operator++(int);constexpr/*iterator*/ operator++(int)      requires forward_range</*Base*/>; constexpr/*iterator*/& operator--()      requires bidirectional_range</*Base*/>;constexpr/*iterator*/ operator--(int)      requires bidirectional_range</*Base*/>; constexpr/*iterator*/& operator+=(difference_type n)      requires random_access_range</*Base*/>;constexpr/*iterator*/& operator-=(difference_type n)      requires random_access_range</*Base*/>; constexpr decltype(auto) operator[](difference_type n)const      requires random_access_range</*Base*/>{return*(*this+ n);} friendconstexprbool operator==(const/*iterator*/& x, default_sentinel_t); friendconstexprbool operator==(const/*iterator*/& x,const/*iterator*/& y)      requires equality_comparable<iterator_t</*Base*/>>; friendconstexprbool operator<(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>; friendconstexprbool operator>(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>; friendconstexprbool operator<=(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>; friendconstexprbool operator>=(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>; friendconstexprauto operator<=>(const/*iterator*/& x,const/*iterator*/& y)      requires random_access_range</*Base*/>&& three_way_comparable<iterator_t</*Base*/>>; friendconstexpr/*iterator*/ operator+(const/*iterator*/& x, difference_type n)      requires random_access_range</*Base*/>;friendconstexpr/*iterator*/ operator+(difference_type n,const/*iterator*/& x)      requires random_access_range</*Base*/>;friendconstexpr/*iterator*/ operator-(const/*iterator*/& x, difference_type n)      requires random_access_range</*Base*/>;friendconstexpr difference_type operator-(const/*iterator*/& x,const/*iterator*/& y)      requires sized_sentinel_for<iterator_t</*Base*/>, iterator_t</*Base*/>>; friendconstexpr difference_type operator-(default_sentinel_t y,const/*iterator*/& x)      requires sized_sentinel_for<sentinel_t</*Base*/>, iterator_t</*Base*/>>;friendconstexpr difference_type operator-(const/*iterator*/& x,                                               default_sentinel_t y)      requires sized_sentinel_for<sentinel_t</*Base*/>, iterator_t</*Base*/>>; friendconstexpr range_rvalue_reference_t</*Base*/> iter_move(const/*iterator*/& i)noexcept(noexcept(ranges::iter_move(i./*current_*/))); friendconstexprvoid iter_swap(const/*iterator*/& x,const/*iterator*/& y)noexcept(noexcept(ranges::iter_swap(x./*current_*/,                                                                 y./*current_*/)))      requires indirectly_swappable<iterator_t</*Base*/>>;};}

      [edit]Class templatestd::ranges::cartesian_product_view

      namespace std::ranges{template<bool Const,class First,class...Vs>  concept/*cartesian-product-is-random-access*/=// exposition-only(random_access_range</*maybe-const*/<Const, First>>&& ...&&(random_access_range</*maybe-const*/<Const, Vs>>&&      sized_range</*maybe-const*/<Const, Vs>>)); template<class R>  concept/*cartesian-product-common-arg*/=// exposition-only    common_range<R>||(sized_range<R>&& random_access_range<R>); template<bool Const,class First,class...Vs>  concept/*cartesian-product-is-bidirectional*/=// exposition-only(bidirectional_range</*maybe-const*/<Const, First>>&& ...&&(bidirectional_range</*maybe-const*/<Const, Vs>>&&/*cartesian-product-common-arg*/</*maybe-const*/<Const, Vs>>)); template<class First,class...>  concept/*cartesian-product-is-common*/=// exposition-only/*cartesian-product-common-arg*/<First>; template<class...Vs>  concept/*cartesian-product-is-sized*/=// exposition-only(sized_range<Vs>&& ...); template<bool Const,template<class>class FirstSent,class First,class...Vs>  concept/*cartesian-is-sized-sentinel*/=// exposition-only(sized_sentinel_for<FirstSent</*maybe-const*/<Const, First>>,                        iterator_t</*maybe-const*/<Const, First>>>&&     ...&&(sized_range</*maybe-const*/<Const, Vs>>&&      sized_sentinel_for<iterator_t</*maybe-const*/<Const, Vs>>,                         iterator_t</*maybe-const*/<Const, Vs>>>)); template</*cartesian-product-common-arg*/ R>constexprauto/*cartesian-common-arg-end*/(R& r){// exposition-onlyifconstexpr(common_range<R>){returnranges::end(r);}else{returnranges::begin(r)+ranges::distance(r);}} template<input_range First, forward_range...Vs>    requires(view<First>&& ...&& view<Vs>)class cartesian_product_view:public view_interface<cartesian_product_view<First, Vs...>>{private:    tuple<First, Vs...>/*bases_*/;// exposition-only// class template cartesian_product_view::iteratortemplate<bool Const>class/*iterator*/;// exposition-only public:constexpr cartesian_product_view()=default;constexprexplicit cartesian_product_view(First first_base, Vs...bases); constexpr/*iterator*/<false> begin()      requires(!/*simple-view*/<First>|| ...||!/*simple-view*/<Vs>);constexpr/*iterator*/<true> begin()const      requires(range<const First>&& ...&& range<const Vs>); constexpr/*iterator*/<false> end()      requires((!/*simple-view*/<First>|| ...||!/*simple-view*/<Vs>)&&/*cartesian-product-is-common*/<First, Vs...>);constexpr/*iterator*/<true> end()const      requires/*cartesian-product-is-common*/<const First,const Vs...>;constexpr default_sentinel_t end()constnoexcept; constexpr/* see description */ size()      requires/*cartesian-product-is-sized*/<First, Vs...>;constexpr/* see description */ size()const      requires/*cartesian-product-is-sized*/<const First,const Vs...>;}; template<class...Vs>  cartesian_product_view(Vs&&...)-> cartesian_product_view<views::all_t<Vs>...>;}

      [edit]Class templatestd::ranges::cartesian_product_view::iterator

      namespace std::ranges{template<input_range First, forward_range...Vs>    requires(view<First>&& ...&& view<Vs>)template<bool Const>class cartesian_product_view<First, Vs...>::/*iterator*/{public:using iterator_category= input_iterator_tag;using iterator_concept=/* see description */;using value_type= tuple<range_value_t</*maybe-const*/<Const, First>>,                             range_value_t</*maybe-const*/<Const, Vs>>...>;using reference= tuple<range_reference_t</*maybe-const*/<Const, First>>,                            range_reference_t</*maybe-const*/<Const, Vs>>...>;using difference_type=/* see description */; /*iterator*/()=default; constexpr/*iterator*/(/*iterator*/<!Const> i)      requires Const&&(convertible_to<iterator_t<First>, iterator_t<const First>>&&                         ...&& convertible_to<iterator_t<Vs>, iterator_t<const Vs>>); constexprauto operator*()const;constexpr/*iterator*/& operator++();constexprvoid operator++(int);constexpr/*iterator*/ operator++(int)      requires forward_range</*maybe-const*/<Const, First>>; constexpr/*iterator*/& operator--()      requires/*cartesian-product-is-bidirectional*/<Const, First, Vs...>;constexpr/*iterator*/ operator--(int)      requires/*cartesian-product-is-bidirectional*/<Const, First, Vs...>; constexpr/*iterator*/& operator+=(difference_type x)      requires/*cartesian-product-is-random-access*/<Const, First, Vs...>;constexpr/*iterator*/& operator-=(difference_type x)      requires/*cartesian-product-is-random-access*/<Const, First, Vs...>; constexpr reference operator[](difference_type n)const      requires/*cartesian-product-is-random-access*/<Const, First, Vs...>; friendconstexprbool operator==(const/*iterator*/& x,const/*iterator*/& y)      requires equality_comparable<iterator_t</*maybe-const*/<Const, First>>>; friendconstexprbool operator==(const/*iterator*/& x, default_sentinel_t); friendconstexprauto operator<=>(const/*iterator*/& x,const/*iterator*/& y)      requires/*all-random-access*/<Const, First, Vs...>; friendconstexpr/*iterator*/ operator+(const/*iterator*/& x, difference_type y)      requires/*cartesian-product-is-random-access*/<Const, First, Vs...>;friendconstexpr/*iterator*/ operator+(difference_type x,const/*iterator*/& y)      requires/*cartesian-product-is-random-access*/<Const, First, Vs...>;friendconstexpr/*iterator*/ operator-(const/*iterator*/& x, difference_type y)      requires/*cartesian-product-is-random-access*/<Const, First, Vs...>;friendconstexpr difference_type operator-(const/*iterator*/& x,const/*iterator*/& y)      requires/*cartesian-is-sized-sentinel*/<Const, iterator_t, First, Vs...>; friendconstexpr difference_type operator-(const/*iterator*/& i, default_sentinel_t)      requires/*cartesian-is-sized-sentinel*/<Const, sentinel_t, First, Vs...>;friendconstexpr difference_type operator-(default_sentinel_t,const/*iterator*/& i)      requires/*cartesian-is-sized-sentinel*/<Const, sentinel_t, First, Vs...>; friendconstexprauto iter_move(const/*iterator*/& i)noexcept(/* see description */); friendconstexprvoid iter_swap(const/*iterator*/& l,const/*iterator*/& r)noexcept(/* see description */)      requires(indirectly_swappable<iterator_t</*maybe-const*/<Const, First>>>&& ...&&               indirectly_swappable<iterator_t</*maybe-const*/<Const, Vs>>>); private:using/*Parent*/=/*maybe-const*/<Const, cartesian_product_view>;// exposition-only/*Parent*/*/*parent_*/= nullptr;// exposition-only    tuple<iterator_t</*maybe-const*/<Const, First>>,          iterator_t</*maybe-const*/<Const, Vs>>...>/*current_*/;// exposition-only template<size_t N= sizeof...(Vs)>constexprvoid/*next*/();// exposition-only template<size_t N= sizeof...(Vs)>constexprvoid/*prev*/();// exposition-only template<class Tuple>constexpr difference_type/*distance-from*/(const Tuple& t)const;// exposition-only constexpr/*iterator*/(/*Parent*/& parent,      tuple<iterator_t</*maybe-const*/<Const, First>>,            iterator_t</*maybe-const*/<Const, Vs>>...> current);// exposition-only};}

      [edit]Class templatestd::ranges::cache_latest_view

      namespace std::ranges{template<input_range V>    requires view<V>class cache_latest_view:public view_interface<cache_latest_view<V>>{    V/*base_*/= V();// exposition-onlyusing/*cache-t*/=      conditional_t<is_reference_v<range_reference_t<V>>,// exposition-only                    add_pointer_t<range_reference_t<V>>,                    range_reference_t<V>>; /*non-propagating-cache*/</*cache-t*/>/*cache_*/;// exposition-only // class cache_latest_view::iteratorclass/*iterator*/;// exposition-only// class cache_latest_view::sentinelclass/*sentinel*/;// exposition-only public:    cache_latest_view()      requires default_initializable<V>=default;constexprexplicit cache_latest_view(V base); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexprauto begin();constexprauto end(); constexprauto size()      requires sized_range<V>;constexprauto size()const      requires sized_range<const V>;}; template<class R>  cache_latest_view(R&&)-> cache_latest_view<views::all_t<R>>;}

      [edit]Class templatestd::ranges::cache_latest_view::iterator

      namespace std::ranges{template<input_range V>    requires view<V>class cache_latest_view<V>::/*iterator*/{    cache_latest_view*/*parent_*/;// exposition-only    iterator_t<V>/*current_*/;// exposition-only constexprexplicit/*iterator*/(cache_latest_view& parent);// exposition-only public:using difference_type= range_difference_t<V>;using value_type= range_value_t<V>;using iterator_concept= input_iterator_tag; /*iterator*/(/*iterator*/&&)=default;/*iterator*/& operator=(/*iterator*/&&)=default; constexpr iterator_t<V> base()&&;constexprconst iterator_t<V>& base()const&noexcept; constexpr range_reference_t<V>& operator*()const; constexpr/*iterator*/& operator++();constexprvoid operator++(int); friendconstexpr range_rvalue_reference_t<V> iter_move(const/*iterator*/& i)noexcept(noexcept(ranges::iter_move(i./*current_*/))); friendconstexprvoid iter_swap(const/*iterator*/& x,const/*iterator*/& y)noexcept(noexcept(ranges::iter_swap(x./*current_*/,                                                                 y./*current_*/)))      requires indirectly_swappable<iterator_t<V>>;};}

      [edit]Class templatestd::ranges::cache_latest_view::sentinel

      namespace std::ranges{template<input_range V>    requires view<V>class cache_latest_view<V>::/*sentinel*/{    sentinel_t<V>/*end_*/= sentinel_t<V>();// exposition-only constexprexplicit/*sentinel*/(cache_latest_view& parent);// exposition-only public:/*sentinel*/()=default; constexpr sentinel_t<V> base()const; friendconstexprbool operator==(const/*iterator*/& x,const/*sentinel*/& y); friendconstexpr range_difference_t<V> operator-(const/*iterator*/& x,const/*sentinel*/& y)      requires sized_sentinel_for<sentinel_t<V>, iterator_t<V>>;friendconstexpr range_difference_t<V> operator-(const/*sentinel*/& x,const/*iterator*/& y)      requires sized_sentinel_for<sentinel_t<V>, iterator_t<V>>;};}

      [edit]Class templatestd::ranges::to_input_view

      namespace std::ranges{template<input_range V>    requires view<V>class to_input_view:public view_interface<to_input_view<V>>{    V/*base_*/= V();// exposition-only // class template to_input_view::iteratortemplate<bool Const>class/*iterator*/;// exposition-only public:    to_input_view()      requires default_initializable<V>=default;constexprexplicit to_input_view(V base); constexpr V base()const&      requires copy_constructible<V>{return/*base_*/;}constexpr V base()&&{return std::move(/*base_*/);} constexprauto begin()      requires(!/*simple-view*/<V>);constexprauto begin()const      requires range<const V>; constexprauto end()      requires(!/*simple-view*/<V>);constexprauto end()const      requires range<const V>; constexprauto size()      requires sized_range<V>;constexprauto size()const      requires sized_range<const V>;}; template<class R>  to_input_view(R&&)-> to_input_view<views::all_t<R>>;}

      [edit]Class templatestd::ranges::to_input_view::iterator

      namespace std::ranges{template<input_range V>    requires view<V>template<bool Const>class to_input_view<V>::/*iterator*/{using/*Base*/=/*maybe-const*/<Const, V>;// exposition-only     iterator_t</*Base*/>/*current_*/= iterator_t</*Base*/>();// exposition-only constexprexplicit/*iterator*/(iterator_t</*Base*/> current);// exposition-only public:using difference_type= range_difference_t</*Base*/>;using value_type= range_value_t</*Base*/>;using iterator_concept= input_iterator_tag; /*iterator*/()      requires default_initializable<iterator_t</*Base*/>>=default; /*iterator*/(/*iterator*/&&)=default;/*iterator*/& operator=(/*iterator*/&&)=default; constexpr/*iterator*/(/*iterator*/<!Const> i)      requires Const&& convertible_to<iterator_t<V>, iterator_t</*Base*/>>; constexpr iterator_t</*Base*/> base()&&;constexprconst iterator_t</*Base*/>& base()const&noexcept; constexpr decltype(auto) operator*()const{return*/*current_*/;} constexpr/*iterator*/& operator++();constexprvoid operator++(int); friendconstexprbool operator==(const/*iterator*/& x,const sentinel_t</*Base*/>& y); friendconstexpr difference_type operator-(const sentinel_t</*Base*/>& y,const/*iterator*/& x)      requires sized_sentinel_for<sentinel_t</*Base*/>, iterator_t</*Base*/>>;friendconstexpr difference_type operator-(const/*iterator*/& x,const sentinel_t</*Base*/>& y)      requires sized_sentinel_for<sentinel_t</*Base*/>, iterator_t</*Base*/>>; friendconstexpr range_rvalue_reference_t</*Base*/> iter_move(const/*iterator*/& i)noexcept(noexcept(ranges::iter_move(i./*current_*/))); friendconstexprvoid iter_swap(const/*iterator*/& x,const/*iterator*/& y)noexcept(noexcept(ranges::iter_swap(x./*current_*/,                                                                 y./*current_*/)))      requires indirectly_swappable<iterator_t</*Base*/>>;};}

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 3914C++23the constraint ofstd::ranges::enumerate_view
      was incorrectly specified in the synopsis
      corrected
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/header/ranges&oldid=182464"

      [8]ページ先頭

      ©2009-2025 Movatter.jp