std::ranges::lazy_split_view<V, Pattern>::inner_iterator
|   template< bool Const > struct /*inner_iterator*/;  | 
 (since C++20)  (exposition only*)  | 
|
The return type of lazy_split_view::outer_iterator::value_type::begin().
Const matches the template argument of outer_iterator.
Member types
| Member | Definition | 
 Base
 | 
 maybe-const <Const, V>(exposition-only member type*)  | 
 iterator_concept (C++20)
 | 
  | 
 iterator_category (C++20)(conditionally present)  | 
 Present only if  
  | 
 value_type (C++20)
 | 
ranges::range_value_t<Base> | 
 difference_type (C++20)
 | 
ranges::range_difference_t<Base> | 
Data members
| Member | Definition | 
 /*outer_iterator*/<Const> i_ (private)
 | 
 An iterator into the underlying view of the parent object lazy_split_view(exposition-only member object*)  | 
 bool incremented_ (private)
 | 
 A flag that indicates whether the operator++ was invoked on this object at least once. (exposition-only member object*)  | 
Member functions
|    (constructor) (C++20)  | 
  constructs an iterator  (public member function)  | 
|    base (C++20)  | 
  returns the underlying iterator  (public member function)  | 
|    operator* (C++20)  | 
  returns the current element  (public member function)  | 
|    operator++operator++(int) (C++20)  | 
  advances the iterator  (public member function)  | 
Member functions
std::ranges::lazy_split_view::inner_iterator::inner_iterator
|   /*inner_iterator*/() = default;  | 
(1) | (since C++20) | 
|   constexpr explicit /*inner_iterator*/( /*outer_iterator*/<Const> i );  | 
(2) | (since C++20) | 
i_ via its default member initializer (= /*outer_iterator*/<Const>()).i_ with std::move(i).The data member incremented_ is initialized with its default member initializer to false.
std::ranges::lazy_split_view::inner_iterator::base
|   constexpr const ranges::iterator_t<Base>& base() const & noexcept;  | 
(1) | (since C++20) | 
|   constexpr ranges::iterator_t<Base> base() && requires ranges::forward_range<V>;  | 
(2) | (since C++20) | 
Returns a copy of the underlying iterator.
std::ranges::lazy_split_view::inner_iterator::operator*
|   constexpr decltype(auto) operator*() const;  | 
(since C++20) | |
Returns the element the underlying iterator points to.
Equivalent to return *i_./*cur*/();.
std::ranges::lazy_split_view::inner_iterator::operator++
|   constexpr /*inner_iterator*/& operator++();  | 
(1) | (since C++20) | 
|   constexpr decltype(auto) operator++(int);  | 
(2) | (since C++20) | 
incremented_ = true;
if constexpr (!ranges::forward_range<Base>)
{
    if constexpr (Pattern::size() == 0)
        return *this;
}
++i_./*cur*/();
if constexpr (ranges::forward_range<Base>)
{
    auto tmp = *this;
    ++*this;
    return tmp;
}
else
    ++*this; // no return statement
Non-member functions
|    operator== (C++20)  | 
  compares the iterators or the iterator and std::default_sentinel  (function)  | 
|    iter_move (C++20)  | 
  casts the result of dereferencing the underlying iterator to its associated rvalue reference type  (function)  | 
|    iter_swap (C++20)  | 
  swaps the objects pointed to by two underlying iterators  (function)  | 
operator==(std::ranges::split_view::inner_iterator)
|   friend constexpr bool operator==( const /*inner_iterator*/& x,                                   const /*inner_iterator*/& y )  | 
(1) | (since C++20) | 
|   friend constexpr bool operator==( const /*inner_iterator*/& x, std::default_sentinel_t );  | 
(2) | (since C++20) | 
auto [pcur, pend] = ranges::subrange{x.i_.parent_->pattern_}; auto end = ranges::end(x.i_.parent_->base_); if constexpr (/*tiny_range*/<Pattern>) { const auto& cur = x.i_./*cur*/(); if (cur == end) return true; if (pcur == pend) return x.incremented_; return *cur == *pcur; } else { auto cur = x.i_./*cur*/(); if (cur == end) return true; if (pcur == pend) return x.incremented_; do { if (*cur != *pcur) return false; if (++pcur == pend) return true; } while (++cur != end); return false; }
The != operator is synthesized from operator==.
These functions are not visible to ordinary unqualified or qualified lookup, and can only be found by argument-dependent lookup when std::ranges::split_view::inner_iterator is an associated class of the arguments.
iter_move(std::ranges::split_view::inner_iterator)
|   friend constexpr decltype(auto) iter_move( const /*inner_iterator*/& i ) noexcept(noexcept(ranges::iter_move(i.i_./*cur*/())));  | 
(since C++20) | |
Equivalent to return ranges::iter_move(i.i_./*cur*/());.
This function  is not visible to ordinary unqualified or qualified lookup, and can only be found by argument-dependent lookup when std::ranges::split_view::inner_iterator is an associated class of the arguments.
iter_swap(std::ranges::split_view::inner_iterator)
|   friend constexpr void iter_swap( const /*inner_iterator*/& x,                                  const /*inner_iterator*/& y )  | 
(since C++20) | |
Equivalent to ranges::iter_swap(x.i_./*cur*/(), y.i_./*cur*/()).
This function  is not visible to ordinary unqualified or qualified lookup, and can only be found by argument-dependent lookup when std::ranges::split_view::inner_iterator is an associated class of the arguments.
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior | 
|---|---|---|---|
| LWG 3591 | C++20 | the && overload of base might invalidate outer iterators
 | 
constraints added | 
| LWG 3593 | C++20 | the const& overload of base returns a reference but might not be noexcept
 | 
made noexcept |