diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2025-03-05 18:06:25 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2025-03-05 22:11:06 +0000 |
commit | c7449f1b1511abbee1c6b060090eda4d2d6b1879 (patch) | |
tree | aef6fdf38257fc38520f7854735b0a3961cbbaa5 | |
parent | a08a5bc4b3998bd4f8d0cca491b8ab6c93769e07 (diff) | |
download | gcc-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/ranges | 2 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/std/ranges/adaptors/enumerate/1.cc | 11 |
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() { |