Created on 2021-06-06.00:00:00 last changed 13 months ago
Proposed resolution:
This wording is relative to N4885.
Modify [range.transform.iterator] as indicated:
namespace std::ranges { template<input_range V, copy_constructible F> requires view<V> && is_object_v<F> && regular_invocable<F&, range_reference_t<V>> && can-reference<invoke_result_t<F&, range_reference_t<V>>> template<bool Const> class transform_view<V, F>::iterator { private: […] public: using iterator_concept = see below; using iterator_category = see below; // not always present using value_type = remove_cvref_t<invoke_result_t<maybe-const<Const, F>&, range_reference_t<Base>>>; using difference_type = range_difference_t<Base>; […] }; }-1- […]
-2- The member typedef-name iterator_category is defined if and only if Base models forward_range. In that case, iterator::iterator_category is defined as follows: Let C denote the type iterator_traits<iterator_t<Base>>::iterator_category.
(2.1) — If is_lvalue_reference_v<invoke_result_t<maybe-const<Const, F>&, range_reference_t<Base>>> is true, then
(2.1.1) — […]
(2.1.2) — […]
(2.2) — Otherwise, iterator_category denotes input_iterator_tag.
[ 2022-07-25 Approved at July 2022 virtual plenary. Status changed: Ready → WP. ]
[ 2022-07-15; LWG telecon: move to Ready ]
[ 2022-07-08; Reflector poll ]
SG9 has decided to proceed with this PR in its 2021-09-13 telecon and not block the issue for a paper on the more general const/non-const problem.
Set status to Tentatively Ready after five votes in favour during reflector poll.
[ 2021-06-14; Reflector poll ]
Set priority to 2 after reflector poll, send to SG9 for design clarification.
Should r
and as_const(r)
guarantee same elements?
Iterators obtained from a const transform_view invoke the transformation function as const, but the value_type and iterator_category determination uses plain F&, i.e., non-const.
History | |||
---|---|---|---|
Date | User | Action | Args |
2023-11-22 15:47:43 | admin | set | status: wp -> c++23 |
2022-07-25 20:32:58 | admin | set | messages: + msg12633 |
2022-07-25 20:32:58 | admin | set | status: ready -> wp |
2022-07-25 20:28:19 | admin | set | messages: + msg12607 |
2022-07-08 19:58:56 | admin | set | messages: + msg12559 |
2022-07-08 19:58:56 | admin | set | status: open -> ready |
2021-06-14 14:09:34 | admin | set | messages: + msg11932 |
2021-06-14 14:09:34 | admin | set | status: new -> open |
2021-06-06 16:05:01 | admin | set | messages: + msg11877 |
2021-06-06 00:00:00 | admin | create |