void next(range_iterator_t<Rng> &it) const
 {
     auto const end = ranges::end(rng_->mutable_base());
     RANGES_ASSERT(it != end);
     it = adjacent_find(std::move(it), end, not_(std::ref(rng_->pred_)));
     advance_bounded(it, 1, end);
 }
 range_iterator_t<Rng> begin(adjacent_remove_if_view &) const
 {
     auto &beg = rng_->begin_;
     if(!beg)
     {
         beg = ranges::begin(rng_->mutable_base());
         this->satisfy(*beg);
     }
     return *beg;
 }
 void satisfy(range_iterator_t<Rng> &it) const
 {
     auto const end = ranges::end(rng_->mutable_base());
     auto &&pred = rng_->pred_;
     if(it == end)
         return;
     auto next = it;
     for(; ++next != end; it = next)
         if(!pred(*it, *next))
             return;
 }
 void next(range_iterator_t<Rng> &it) const
 {
     RANGES_ASSERT(it != ranges::end(rng_->mutable_base()));
     this->satisfy(++it);
 }