aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2025-03-05 18:06:25 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2025-03-05 22:11:06 +0000
commitc7449f1b1511abbee1c6b060090eda4d2d6b1879 (patch)
treeaef6fdf38257fc38520f7854735b0a3961cbbaa5
parenta08a5bc4b3998bd4f8d0cca491b8ab6c93769e07 (diff)
downloadgcc-c7449f1b1511abbee1c6b060090eda4d2d6b1879.zip
gcc-c7449f1b1511abbee1c6b060090eda4d2d6b1879.tar.gz
gcc-c7449f1b1511abbee1c6b060090eda4d2d6b1879.tar.bz2
libstdc++: Make enumerate_view::iterator::operator- noexcept
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.
-rw-r--r--libstdc++-v3/include/std/ranges2
-rw-r--r--libstdc++-v3/testsuite/std/ranges/adaptors/enumerate/1.cc11
2 files changed, 12 insertions, 1 deletions
diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges
index 6790fcf..e21f528 100644
--- a/libstdc++-v3/include/std/ranges
+++ b/libstdc++-v3/include/std/ranges
@@ -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
diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/enumerate/1.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/enumerate/1.cc
index c33aa9f..19aa982 100644
--- a/libstdc++-v3/testsuite/std/ranges/adaptors/enumerate/1.cc
+++ b/libstdc++-v3/testsuite/std/ranges/adaptors/enumerate/1.cc
@@ -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()
{