diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index 6790fcf7af1..e21f5284b46 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 c33aa9ff51e..19aa98284d0 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 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() {