cpp / latest / ranges / join_view / iterator / satisfy.html /

std::ranges::join_view<V>::iterator<Const>::satisfy

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();

Parameters

(none).

Return value

(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