private: constexpr void satisfy(); // exposition only | (since C++20) |
Skips over empty inner ranges and initializes the underlying iterator inner_.
Let the constant /*ref-is-glvalue*/ be std::is_reference_v<ranges::range_reference_t<Base>>. The function body is equivalent to.
auto update_inner = [this](const ranges::iterator_t<Base>& x) -> auto&& {
if constexpr (/*ref-is-glvalue*/) // *x is a reference
return *x;
else
return parent_->inner_./*emplace-deref*/(x);
};
for (; outer_ != ranges::end(parent_->base_); ++outer_) {
auto&& inner = update_inner(outer_);
inner_ = ranges::begin(inner);
if (inner_ != ranges::end(inner))
return;
}
if constexpr (/*ref-is-glvalue*/)
inner_ = InnerIter();(none).
(none).
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/ranges/join_view/iterator/satisfy