Created on 2019-09-13.00:00:00 last changed 45 months ago
Proposed resolution:
This wording is relative to N4830.
Modify [range.iota.iterator] as indicated:
namespace std::ranges { template<class W, class Bound> struct iota_view<W, Bound>::iterator { private: […] public: using iterator_conceptategory= see below; using iterator_category = input_iterator_tag; using value_type = W; using difference_type = IOTA-DIFF-T(W); […] }; […] }-1- iterator::iterator_concept
ategoryis defined as follows:
(1.1) — If W models advanceable, then iterator_concept
ategoryis random_access_iterator_tag.(1.2) — Otherwise, if W models decrementable, then iterator_concept
ategoryis bidirectional_iterator_tag.(1.3) — Otherwise, if W models incrementable, then iterator_concept
ategoryis forward_iterator_tag.(1.4) — Otherwise, iterator_concept
ategoryis input_iterator_tag.
[ 2019-10-19 Issue Prioritization ]
Status to Tentatively Ready and priority to 0 after eight positive votes on the reflector.
In the old way of looking at the world, forward iterators need to return real references. Since dereferencing iota_view's iterators returns by value, it cannot be a C++17 forward iterator. (It can, however, be a C++20 forward_iterator.) However, iota_view's iterator has an iterator_category that (sometimes) falsely claims that it is forward or better (depending on the properties of the weakly_incrementable type it wraps).
History | |||
---|---|---|---|
Date | User | Action | Args |
2021-02-25 10:48:01 | admin | set | status: wp -> c++20 |
2020-02-24 16:02:59 | admin | set | status: voting -> wp |
2020-01-17 04:54:50 | admin | set | status: ready -> voting |
2019-10-19 11:34:54 | admin | set | messages: + msg10703 |
2019-10-19 11:34:54 | admin | set | status: new -> ready |
2019-09-18 17:59:07 | admin | set | messages: + msg10653 |
2019-09-13 00:00:00 | admin | create |