diff --git a/single_include/flux.hpp b/single_include/flux.hpp index 0ef0bbc1..7ebd0367 100644 --- a/single_include/flux.hpp +++ b/single_include/flux.hpp @@ -3377,12 +3377,22 @@ struct for_each_while_fn { if constexpr (requires { traits_t::for_each_while(seq, std::move(pred)); }) { return traits_t::for_each_while(seq, std::move(pred)); } else { - auto cur = first(seq); - while (!is_last(seq, cur)) { - if (!std::invoke(pred, read_at(seq, cur))) { break; } - inc(seq, cur); + if constexpr (multipass_sequence && bounded_sequence) { + auto cur = first(seq); + auto end = last(seq); + while (cur != end) { + if (!std::invoke(pred, read_at(seq, cur))) { break; } + inc(seq, cur); + } + return cur; + } else { + auto cur = first(seq); + while (!is_last(seq, cur)) { + if (!std::invoke(pred, read_at(seq, cur))) { break; } + inc(seq, cur); + } + return cur; } - return cur; } } };