Title
Hardening `view_interface::operator[]`
Status
new
Section
[view.interface]
Submitter
Hewill Kang

Created on 2026-05-11.00:00:00 last changed yesterday

Messages

Date: 2026-05-16.12:27:04

Proposed resolution:

This wording is relative to N5046.

  1. Modify [view.interface], class template `view_interface` synopsis, as indicated:

    namespace std::ranges {
      template<class D>
        requires is_class_v<D> && same_as<D, remove_cv_t<D>>
      class view_interface {
        […]
      public:
        […]
        template<random_access_range R = D>
          constexpr decltype(auto) operator[](range_difference_t<R> n) {
            return ranges::begin(derived())[n];
          };
        template<random_access_range R = const D>
          constexpr decltype(auto) operator[](range_difference_t<R> n) const {
            return ranges::begin(derived())[n];
          };
      };
    }
    
  2. Modify [view.interface.members] as indicated:

    constexpr decltype(auto) back() requires bidirectional_range<D> && common_range<D>;
    constexpr decltype(auto) back() const
      requires bidirectional_range<const D> && common_range<const D>;
    

    -3- Hardened preconditions: `!empty()` is `true`.

    -4- Effects: Equivalent to: return *ranges::prev(ranges::end(derived()));

    
    template<random_access_range R = D>
      constexpr decltype(auto) operator[](range_difference_t<R> n);
    template<random_access_range R = const D>
      constexpr decltype(auto) operator[](range_difference_t<R> n) const;
    

    -?- Hardened preconditions: If `D` models `sized_range`, then n >= 0 && n < ranges::distance(derived()) is `true`.

    -?- Effects: Equivalent to: return ranges::begin(derived())[n];

Date: 2026-05-11.00:00:00

Hardening `view_interface::operator[]` to prevent out-of-bounds access is worthwhile for the `sized_range` cases, and we have already done so for other standard views such as `span` and `string_view`'s `operator[]`.

History
Date User Action Args
2026-05-16 12:27:04adminsetmessages: + msg16295
2026-05-11 00:00:00admincreate