[libcxx-commits] [libcxx] [libc++][ranges] Implement P3052R2: `view_interface::at()` (PR #205012)

A. Jiang via libcxx-commits libcxx-commits at lists.llvm.org
Wed Sep 2 00:30:36 PDT 2026


================
@@ -159,6 +161,28 @@ class view_interface {
   [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator[](range_difference_t<_RARange> __index) const {
     return ranges::begin(__derived())[__index];
   }
+
+#  if _LIBCPP_STD_VER >= 29
+
+  template <random_access_range _RARange = _Derived>
+    requires sized_range<_RARange> // freestanding-deleted
+  [[nodiscard]] constexpr decltype(auto) at(range_difference_t<_RARange> __index) {
+    if (__index < 0 || __index >= ranges::distance(__derived())) {
+      std::__throw_out_of_range("The index passed to `view_interface::at()` is out of bounds.");
+    }
+    return (*this)[__index];
+  }
+
+  template <random_access_range _RARange = const _Derived>
+    requires sized_range<_RARange> // freestanding-deleted
----------------
frederick-vs-ja wrote:

```suggestion
    requires sized_range<_RARange>
```

https://github.com/llvm/llvm-project/pull/205012


More information about the libcxx-commits mailing list