Created on 2025-05-01.00:00:00 last changed 1 month ago
Proposed resolution:
This wording is relative to N5008.
Modify [range.stride.iterator] as indicated:
namespace std::ranges {
template<input_range V>
requires view<V>
template<bool Const>
class stride_view<V>::iterator {
using Parent = maybe-const<Const, stride_view>; // exposition only
using Base = maybe-const<Const, V>; // exposition only
iterator_t<Base> current_ = iterator_t<Base>(); // exposition only
sentinel_t<Base> end_ = sentinel_t<Base>(); // exposition only
range_difference_t<Base> stride_ = 0; // exposition only
range_difference_t<Base> missing_ = 0; // exposition only
constexpr iterator(Parent* parent, iterator_t<Base> current, // exposition only
range_difference_t<Base> missing = 0);
public:
[…]
constexpr decltype(auto) operator*() const { return *current_; }
constexpr auto operator->() const
requires has-arrow<iterator_t<Base>> && copyable<iterator_t<Base>>
{ return current_; }
[…]
};
}
[ 2025-10-21; Reflector poll. ]
Set priority to 3 after reflector poll.
Currently, only filter_view::iterator and join_view::InnerIter in
<ranges> provide operator->, which makes sense since their `operator*`
simply dereferences the underlying iterator.
stride_view::iterator, suggesting that providing
operator-> does is the intuitive thing to do, e.g. when wrapping pointers, keeping
operator-> valid so that users can continue to use it->foo().
There is no reason to give up this convenience because stride_view::iterator is intended
to preserve the nature of the underlying iterator.
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2025-10-21 15:17:02 | admin | set | messages: + msg15328 |
| 2025-05-04 12:29:21 | admin | set | messages: + msg14746 |
| 2025-05-01 00:00:00 | admin | create | |