Experimental library header <experimental/ranges/iterator> - cppreference.com (original) (raw)

namespace std { namespace experimental { namespace ranges { inline namespace v1 {   template concept bool /* dereferenceable */ // exposition only = requires(T& t) { {t} -> auto&&; };   namespace { constexpr / unspecified / iter_move = / unspecified /; constexpr / unspecified / iter_swap = / unspecified */; }   template struct difference_type; template using difference_type_t = typename difference_type::type;   template struct value_type; template using value_type_t = typename value_type::type;   template struct iterator_category; template using iterator_category_t = typename iterator_category::type;   template </* dereferenceable */ T> using reference_t = decltype(declval<T&>());   template </* dereferenceable */ T> requires / see definition / using rvalue_reference_t = decltype(ranges::iter_move(declval<T&>()));   template concept bool Readable = / see definition /;   template <class Out, class T> concept bool Writable = / see definition /;   template concept bool WeaklyIncrementable = / see definition /;   template concept bool Incrementable = / see definition /;   template concept bool Iterator = / see definition /;   template <class S, class I> concept bool Sentinel = / see definition /;   template <class S, class I> constexpr bool disable_sized_sentinel = false;   template <class S, class I> concept bool SizedSentinel = / see definition /;   template concept bool InputIterator = / see definition /;   template concept bool OutputIterator = / see definition /;   template concept bool ForwardIterator = / see definition /;   template concept bool BidirectionalIterator = / see definition /;   template concept bool RandomAccessIterator = / see definition /;   template <class F, class I> concept bool IndirectUnaryInvocable = / see definition /;   template <class F, class I> concept bool IndirectRegularUnaryInvocable = / see definition /;   template <class F, class I> concept bool IndirectUnaryPredicate = / see definition /;   template <class F, class I1, class I2 = I1> concept bool IndirectRelation = / see definition /;   template <class F, class I1, class I2 = I1> concept bool IndirectStrictWeakOrder = / see definition /;   template struct indirect_result_of;   template <class F, class... Is> requires Invocable<F, reference_t...> struct indirect_result_of<F(Is...)>;   template using indirect_result_of_t = typename indirect_result_of::type;   template <Readable I, IndirectRegularUnaryInvocable Proj> struct projected;   template <WeaklyIncrementable I, class Proj> struct difference_type<projected<I, Proj>>;   template <class In, class Out> concept bool IndirectlyMovable = / see definition /;   template <class In, class Out> concept bool IndirectlyMovableStorable = / see definition /;   template <class In, class Out> concept bool IndirectlyCopyable = / see definition /;   template <class In, class Out> concept bool IndirectlyCopyableStorable = / see definition /;   template <class I1, class I2 = I1> concept bool IndirectlySwappable = / see definition /;   template <class I1, class I2, class R = equal_to<>, class P1 = identity, class P2 = identity> concept bool IndirectlyComparable = / see definition /;   template concept bool Permutable = / see definition /;   template <class I1, class I2, class Out, class R = less<>, class P1 = identity, class P2 = identity> concept bool Mergeable = / see definition /;   template <class I, class R = less<>, class P = identity> concept bool Sortable = / see definition /;   template using iterator_traits = / see definition /;   template using iter_common_reference_t = common_reference_t<reference_t, value_type_t&>;   struct output_iterator_tag { }; struct input_iterator_tag { }; struct forward_iterator_tag : input_iterator_tag { }; struct bidirectional_iterator_tag : forward_iterator_tag { }; struct random_access_iterator_tag : bidirectional_iterator_tag { };   namespace { constexpr / unspecified / advance = / unspecified /; constexpr / unspecified / distance = / unspecified /; constexpr / unspecified / next = / unspecified /; constexpr / unspecified / prev = / unspecified */; }   template class reverse_iterator;   template <class I1, class I2> requires EqualityComparableWith<I1, I2> constexpr bool operator==( const reverse_iterator& x, const reverse_iterator& y); template <class I1, class I2> requires EqualityComparableWith<I1, I2> constexpr bool operator!=( const reverse_iterator& x, const reverse_iterator& y); template <class I1, class I2> requires StrictTotallyOrderedWith<I1, I2> constexpr bool operator<( const reverse_iterator& x, const reverse_iterator& y); template <class I1, class I2> requires StrictTotallyOrderedWith<I1, I2> constexpr bool operator>( const reverse_iterator& x, const reverse_iterator& y); template <class I1, class I2> requires StrictTotallyOrderedWith<I1, I2> constexpr bool operator>=( const reverse_iterator& x, const reverse_iterator& y); template <class I1, class I2> requires StrictTotallyOrderedWith<I1, I2> constexpr bool operator<=( const reverse_iterator& x, const reverse_iterator& y);   template <class I1, class I2> requires SizedSentinel<I1, I2> constexpr difference_type_t operator-( const reverse_iterator& x, const reverse_iterator& y); template constexpr reverse_iterator operator+( difference_type_t n, const reverse_iterator& x);   template constexpr reverse_iterator make_reverse_iterator(I i);   template class back_insert_iterator; template back_insert_iterator back_inserter(Container& x);   template class front_insert_iterator; template front_insert_iterator front_inserter(Container& x);   template class insert_iterator; template insert_iterator inserter(Container& x, iterator_t i);   template class move_iterator;   template <class I1, class I2> requires EqualityComparableWith<I1, I2> constexpr bool operator==( const move_iterator& x, const move_iterator& y); template <class I1, class I2> requires EqualityComparableWith<I1, I2> constexpr bool operator!=( const move_iterator& x, const move_iterator& y); template <class I1, class I2> requires StrictTotallyOrderedWith<I1, I2> constexpr bool operator<( const move_iterator& x, const move_iterator& y); template <class I1, class I2> requires StrictTotallyOrderedWith<I1, I2> constexpr bool operator<=( const move_iterator& x, const move_iterator& y); template <class I1, class I2> requires StrictTotallyOrderedWith<I1, I2> constexpr bool operator>( const move_iterator& x, const move_iterator& y); template <class I1, class I2> requires StrictTotallyOrderedWith<I1, I2> constexpr bool operator>=( const move_iterator& x, const move_iterator& y);   template <class I1, class I2> requires SizedSentinel<I1, I2> constexpr difference_type_t operator-( const move_iterator& x, const move_iterator& y); template constexpr move_iterator operator+( difference_type_t n, const move_iterator& x);   template constexpr move_iterator make_move_iterator(I i);   template class move_sentinel;   template <class I, Sentinel S> constexpr bool operator==( const move_iterator& i, const move_sentinel& s); template <class I, Sentinel S> constexpr bool operator==( const move_sentinel& s, const move_iterator& i); template <class I, Sentinel S> constexpr bool operator!=( const move_iterator& i, const move_sentinel& s); template <class I, Sentinel S> constexpr bool operator!=( const move_sentinel& s, const move_iterator& i);   template <class I, SizedSentinel S> constexpr difference_type_t operator-( const move_sentinel& s, const move_iterator& i); template <class I, SizedSentinel S> constexpr difference_type_t operator-( const move_iterator& i, const move_sentinel& s);   template constexpr move_sentinel make_move_sentinel(S s);   template <Iterator I, Sentinel S> requires !Same<I, S> class common_iterator;   template <Readable I, class S> struct value_type<common_iterator<I, S>>;   template <InputIterator I, class S> struct iterator_category<common_iterator<I, S>>;   template <ForwardIterator I, class S> struct iterator_category<common_iterator<I, S>>;   template <class I1, class I2, Sentinel S1, Sentinel S2> bool operator==( const common_iterator<I1, S1>& x, const common_iterator<I2, S2>& y); template <class I1, class I2, Sentinel S1, Sentinel S2> requires EqualityComparableWith<I1, I2> bool operator==( const common_iterator<I1, S1>& x, const common_iterator<I2, S2>& y); template <class I1, class I2, Sentinel S1, Sentinel S2> bool operator!=( const common_iterator<I1, S1>& x, const common_iterator<I2, S2>& y);   template <class I2, SizedSentinel I1, SizedSentinel S1, SizedSentinel S2> difference_type_t operator-( const common_iterator<I1, S1>& x, const common_iterator<I2, S2>& y);   class default_sentinel;   template class counted_iterator;   template <class I1, class I2> requires Common<I1, I2> constexpr bool operator==( const counted_iterator& x, const counted_iterator& y); constexpr bool operator==( const counted_iterator& x, default_sentinel); constexpr bool operator==( default_sentinel, const counted_iterator& x); template <class I1, class I2> requires Common<I1, I2> constexpr bool operator!=( const counted_iterator& x, const counted_iterator& y); constexpr bool operator!=( const counted_iterator& x, default_sentinel y); constexpr bool operator!=( default_sentinel x, const counted_iterator& y); template <class I1, class I2> requires Common<I1, I2> constexpr bool operator<( const counted_iterator& x, const counted_iterator& y); template <class I1, class I2> requires Common<I1, I2> constexpr bool operator<=( const counted_iterator& x, const counted_iterator& y); template <class I1, class I2> requires Common<I1, I2> constexpr bool operator>( const counted_iterator& x, const counted_iterator& y); template <class I1, class I2> requires Common<I1, I2> constexpr bool operator>=( const counted_iterator& x, const counted_iterator& y);   template <class I1, class I2> requires Common<I1, I2> constexpr difference_type_t operator-( const counted_iterator& x, const counted_iterator& y); template constexpr difference_type_t operator-( const counted_iterator& x, default_sentinel y); template constexpr difference_type_t operator-( default_sentinel x, const counted_iterator& y); template constexpr counted_iterator operator+(difference_type_t n, const counted_iterator& x);   template constexpr counted_iterator make_counted_iterator(I i, difference_type_t n);   class unreachable; template constexpr bool operator==(const I&, unreachable) noexcept; template constexpr bool operator==(unreachable, const I&) noexcept; template constexpr bool operator!=(const I&, unreachable) noexcept; template constexpr bool operator!=(unreachable, const I&) noexcept;   template class dangling;   template <class T, class CharT = char, class Traits = char_traits, class Distance = ptrdiff_t> class istream_iterator;   template <class T, class CharT, class Traits, class Distance> bool operator==(const istream_iterator<T, CharT, Traits, Distance>& x, const istream_iterator<T, CharT, Traits, Distance>& y); template <class T, class CharT, class Traits, class Distance> bool operator==(default_sentinel x, const istream_iterator<T, CharT, Traits, Distance>& y); template <class T, class CharT, class Traits, class Distance> bool operator==(const istream_iterator<T, CharT, Traits, Distance>& x, default_sentinel y); template <class T, class CharT, class Traits, class Distance> bool operator!=(const istream_iterator<T, CharT, Traits, Distance>& x, const istream_iterator<T, CharT, Traits, Distance>& y); template <class T, class CharT, class Traits, class Distance> bool operator!=(default_sentinel x, const istream_iterator<T, CharT, Traits, Distance>& y); template <class T, class CharT, class Traits, class Distance> bool operator!=(const istream_iterator<T, CharT, Traits, Distance>& x, default_sentinel y);   template <class T, class CharT = char, class Traits = char_traits> class ostream_iterator;   template <class CharT, class Traits = char_traits > class istreambuf_iterator;   template <class CharT, class Traits> bool operator==(const istreambuf_iterator<CharT, Traits>& a, const istreambuf_iterator<CharT, Traits>& b); template <class CharT, class Traits> bool operator==(default_sentinel a, const istreambuf_iterator<CharT, Traits>& b); template <class CharT, class Traits> bool operator==(const istreambuf_iterator<CharT, Traits>& a, default_sentinel b); template <class CharT, class Traits> bool operator!=(const istreambuf_iterator<CharT, Traits>& a, const istreambuf_iterator<CharT, Traits>& b); template <class CharT, class Traits> bool operator!=(default_sentinel a, const istreambuf_iterator<CharT, Traits>& b); template <class CharT, class Traits> bool operator!=(const istreambuf_iterator<CharT, Traits>& a, default_sentinel b);   template <class CharT, class Traits = char_traits > class ostreambuf_iterator;   }}}}   namespace std { template <experimental::ranges::Iterator Out> struct iterator_traits; template <experimental::ranges::InputIterator In> struct iterator_traits; template <experimental::ranges::InputIterator In> requires experimental::ranges::Sentinel<In, In> struct iterator_traits; }