Created on 2019-09-09.00:00:00 last changed 52 months ago
Proposed resolution:
This wording is relative to N4830.
Modify [range.join.view], class template join_view synopsis, as indicated:
[Drafting note: Changing the join_view<V>::inner_ member to be mutable is safe because this exposition-only member is only used when the join_view is single-pass and only modified by operations that invalidate other iterators]
namespace std::ranges { template<input_range V> requires view<V> && input_range<range_reference_t<V>>> && (is_reference_v<range_reference_t<V>> || view<range_value_t<V>>) class join_view : public view_interface<join_view<V>> { private: […] V base_ = V(); // exposition only mutable all_view<InnerRng> inner_ = // exposition only, present only when // !is_reference_v<InnerRng> all_view<InnerRng>(); public: […] }; }
[ 2020-08-21 Issue processing telecon: resolved by P1983R0 §2.4. Status changed: New → Resolved. ]
[ 2020-02-10, Prague ]
Would be resolved by P1983R0.
[ 2019-10 Priority set to 2 after reflector discussion ]
The non-const join_view::begin() returns iterator<simple-view<V>>. If simple-view<V> is true, then the iterator stores a const join_view* named parent_. iterator::satisfy() will try to write to parent_->inner_ if ref_is_glvalue is false. That doesn't work because the inner_ field is not marked mutable.
History | |||
---|---|---|---|
Date | User | Action | Args |
2020-08-21 20:53:46 | admin | set | messages: + msg11453 |
2020-08-21 20:53:46 | admin | set | status: new -> resolved |
2020-02-10 14:07:48 | admin | set | messages: + msg11010 |
2019-10-07 02:21:30 | admin | set | messages: + msg10681 |
2019-09-15 12:42:55 | admin | set | messages: + msg10627 |
2019-09-09 00:00:00 | admin | create |