Created on 2021-09-29.00:00:00 last changed 12 months ago
Proposed resolution:
This wording is relative to N4892.
Modify [range.iota.view] as indicated:
constexpr auto size() const requires see below;-15- Effects: Equivalent to:
if constexpr (is-integer-like<W> && is-integer-like<Bound>) return (value_ < 0) ? ((bound_ < 0) ? to-unsigned-like(-value_) - to-unsigned-like(-bound_) : to-unsigned-like(bound_) + to-unsigned-like(-value_)) : to-unsigned-like(bound_) - to-unsigned-like(value_); else return to-unsigned-like(bound_ - value_);-16- Remarks: The expression in the requires-clause is equivalent to:
(same_as<W, Bound> && advanceable<W>) || (integralis-integer-like<W> &&integralis-integer-like<Bound>) || sized_sentinel_for<Bound, W>
[ 2022-02-10 Approved at February 2022 virtual plenary. Status changed: Tentatively Ready → WP. ]
[ 2021-10-14; Reflector poll ]
Set status to Tentatively Ready after six votes in favour during reflector poll.
It seems that the iota_view tends to accept integer-class types as its value types, by using is-integer-like or is-signed-integer-like through the specification, although it's unspecified whether any of them satisfies weakly_incrementable. However, the requires-clause of iota_view::size ([range.iota.view] p16) uses (integral<W> && integral<Bound>), which sometimes rejects integer-class types.
Should we relax the restrictions by changing this part to (is-integer-like<W> && is-integer-like<Bound>)?History | |||
---|---|---|---|
Date | User | Action | Args |
2023-11-22 15:47:43 | admin | set | status: wp -> c++23 |
2022-02-10 12:58:57 | admin | set | messages: + msg12351 |
2022-02-10 12:58:57 | admin | set | status: ready -> wp |
2021-10-14 11:35:22 | admin | set | messages: + msg12150 |
2021-10-14 11:35:22 | admin | set | status: new -> ready |
2021-10-03 13:27:56 | admin | set | messages: + msg12092 |
2021-09-29 00:00:00 | admin | create |