Created on 2026-03-27.00:00:00 last changed 2 weeks ago
Proposed resolution:
This wording is relative to N5032.
Modify [range.reverse.view] as indicated:
[…]namespace std::ranges { template<view V> requires bidirectional_range<V> class reverse_view : public view_interface<reverse_view<V>> { […] constexpr reverse_iterator<iterator_t<V>> begin() requires (!(simple-view<V> && common_range<const V>));constexpr reverse_iterator<iterator_t<V>> begin() requires common_range<V>;constexpr auto begin() const requires common_range<const V>; constexpr reverse_iterator<iterator_t<V>> end() requires (!simple-view<V>); constexpr auto end() const requirescommon_range<const V>; […] }; […] }constexpr reverse_iterator<iterator_t<V>> begin() requires (!(simple-view<V> && common_range<const V>));-2-Returns:
make_reverse_iterator(ranges::next(ranges::begin(base_), ranges::end(base_)))-3- Remarks: In order to provide the amortized constant time complexity required by the
rangeconcept, this function caches the result within thereverse_viewfor use on subsequent calls.constexpr reverse_iterator<iterator_t<V>> begin() requires common_range<V>;constexpr auto begin() const requires common_range<const V>;-4- Effects: Equivalent to:
return make_reverse_iterator(ranges::end(base_));constexpr reverse_iterator<iterator_t<V>> end() requires (!simple-view<V>); constexpr auto end() const requirescommon_range<const V>;-5- Effects: Equivalent to:
return make_reverse_iterator(ranges::begin(base_));
Currently, non-const begin/end for reverse_view
are always provided.
However, when the underlying range is simple-view and common_view,
we can just provide const begin to reduce the number of template instantiations.
And it is also reasonable to only provide const end in the case of
simple-view for the same reason.
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2026-04-04 13:08:17 | admin | set | messages: + msg16247 |
| 2026-03-27 00:00:00 | admin | create | |