49 is_finite<Rng>::value ? finite : range_cardinality<Rng>::value>
55 detail::non_propagating_cache<iterator_t<Rng>> second_;
56 semiregular_box_t<Fun> fun_;
65 sentinel_t<Rng> last_;
66 semiregular_box_ref_or_val_t<Fun, false> fun_;
69 template<
typename I = iterator_t<Rng>>
72 return {cur_, next_cur_};
77 return {cur_, next_cur_};
83 auto partition_cur = adjacent_find(cur_, last_, not_fn(fun_));
85 partition_cur != last_ ? ranges::next(partition_cur) : partition_cur;
92 bool equal(cursor
const & that)
const
94 return cur_ == that.cur_;
96 cursor(semiregular_box_ref_or_val_t<Fun, false> fun,
iterator_t<Rng> first,
107 cursor begin_cursor()
109 auto first = ranges::begin(rng_);
110 auto last = ranges::end(rng_);
113 auto partition_cur = adjacent_find(first, last, not_fn(fun_));
115 partition_cur != last ? ranges::next(partition_cur) : partition_cur;
117 return {fun_, first, *second_, last};
123 : rng_(std::move(rng))
124 , fun_(std::move(fun))