]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Make enumerate_view::iterator::operator- noexcept
authorJonathan Wakely <jwakely@redhat.com>
Wed, 5 Mar 2025 18:06:25 +0000 (18:06 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Wed, 5 Mar 2025 22:11:06 +0000 (22:11 +0000)
Implement LWG 3912, approved in Varna, June 2023.

libstdc++-v3/ChangeLog:

* include/std/ranges (enumerate_view::_Iterator::operator-):
Add noexcept, as per LWG 3912.
* testsuite/std/ranges/adaptors/enumerate/1.cc: Check iterator
difference is noexcept.

libstdc++-v3/include/std/ranges
libstdc++-v3/testsuite/std/ranges/adaptors/enumerate/1.cc

index 6790fcf7af19694da54210e72a5c6de7744202f6..e21f5284b46d29d7a31f4c3869a0e31183a6f184 100644 (file)
@@ -9176,7 +9176,7 @@ namespace views::__adaptor
     { return auto(__x) -= __y; }
 
     friend constexpr difference_type
-    operator-(const _Iterator& __x, const _Iterator& __y)
+    operator-(const _Iterator& __x, const _Iterator& __y) noexcept
     { return __x._M_pos - __y._M_pos; }
 
     friend constexpr auto
index c33aa9ff51e13edb88c2c6e384ba92e60e943cbd..19aa98284d0821394caf0e365c3388d261d4b566 100644 (file)
@@ -91,6 +91,17 @@ test02()
     }
 }
 
+void
+test_lwg3912()
+{
+  int x[] = {1, 2, 3};
+  test_input_range<int> rx (x);
+  auto v = rx | views::enumerate;
+  auto iter = std::ranges::begin(v);
+  // LWG 3912. enumerate_view::iterator::operator- should be noexcept
+  static_assert( noexcept(iter - iter) );
+}
+
 int
 main()
 {