Created on 2022-09-30.00:00:00 last changed 31 months ago
[ 2023-03-22 Resolved by the adoption of P2770R0 in Issaquah. Status changed: New → Resolved. ]
[ 2022-10-12; Reflector poll ]
Set priority to 3 after reflector poll.
"Could introduce an as_lvalue lambda (like
auto as_lvalue = []<class T>(T&& x) -> T& { return (T&)x; };) and use it throughout."
This wording is relative to N4917.
Modify [range.join.iterator] as indicated:
constexpr iterator& operator--()
requires ref-is-glvalue && bidirectional_range<Base> &&
bidirectional_range<range_reference_t<Base>> &&
common_range<range_reference_t<Base>>;
-13- Effects: Equivalent to:
if (outer_ == ranges::end(parent_->base_)) {
auto&& inner = *--outer_;
inner_ = ranges::end(inner*--outer_);
}
while (trueinner_ == ranges::begin(*outer_)) {
if (auto&& tmp = *outer_; inner_ == ranges::begin(tmp)) {
auto&& inner = *--outer_;
inner_ = ranges::end(inner*--outer_);
} else {
break;
}
}
--inner_;
return *this;
Currently, join_view::iterator::operator-- has the following Effects:
if (outer_ == ranges::end(parent_->base_)) inner_ = ranges::end(*--outer_); while (inner_ == ranges::begin(*outer_)) inner_ = ranges::end(*--outer_); --inner_; return *this;
which uses ranges::end(*--outer_) to get the sentinel of the inner range. However, *--outer_ may return an rvalue reference to a non-borrowed range, in which case calling ranges::end will be ill-formed, for example:
#include <ranges>
#include <vector>
int main() {
std::vector<std::vector<int>> v;
auto r = v | std::views::transform([](auto& x) -> auto&& { return std::move(x); })
| std::views::join;
auto e = --r.end(); // hard error
}
The proposed resolution uses a temporary reference to bind *--outer_, so that ranges::end is always invoked on an lvalue range, which is consistent with the behavior of join_with_view::iterator::operator--.
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2023-03-23 11:42:08 | admin | set | status: new -> resolved |
| 2022-10-12 14:38:10 | admin | set | messages: + msg12860 |
| 2022-10-01 17:55:26 | admin | set | messages: + msg12839 |
| 2022-09-30 00:00:00 | admin | create | |