]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Make join_view::_Iterator::_M_get_inner noexcept [PR121804]
authorPatrick Palka <ppalka@redhat.com>
Fri, 5 Sep 2025 17:14:16 +0000 (13:14 -0400)
committerPatrick Palka <ppalka@redhat.com>
Fri, 5 Sep 2025 17:14:16 +0000 (13:14 -0400)
Since this helper (added in r16-3576-g7f7f1878eedd80) is used in the
noexcept-spec of iter_move and iter_swap, it in turn needs an accurate
noexcept-spec.

PR libstdc++/121804

libstdc++-v3/ChangeLog:

* include/std/ranges (join_view::_Iterator::_M_get_inner):
Mark noexcept.
* testsuite/std/ranges/adaptors/join.cc (test16): New test.

Reviewed-by: Tomasz KamiƄski <tkaminsk@redhat.com>
Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/include/std/ranges
libstdc++-v3/testsuite/std/ranges/adaptors/join.cc

index bae50d06ca810ba7d4f0bd7e17ad17d0e85fd1d0..f493da56203b6d8d270f3a82f7d0cc4f11413872 100644 (file)
@@ -2935,7 +2935,7 @@ namespace views::__adaptor
          }
 
          constexpr _Inner_iter&
-         _M_get_inner()
+         _M_get_inner() noexcept
          {
            if constexpr (forward_iterator<_Inner_iter>)
              return _M_inner;
@@ -2944,7 +2944,7 @@ namespace views::__adaptor
          }
 
          constexpr const _Inner_iter&
-         _M_get_inner() const
+         _M_get_inner() const noexcept
          {
            if constexpr (forward_iterator<_Inner_iter>)
              return _M_inner;
index a9395b4899191127ccd7ab226eee92985c3eddc5..db7749045c236d15092903b821716ba338a14158 100644 (file)
@@ -240,6 +240,17 @@ test15()
   constexpr decltype(views::join(views::single(views::single(0))).begin()) it;
 }
 
+void
+test16()
+{
+  // PR libstdc++/121804 - join_view::iterator::_M_get_inner should be noexcept
+  std::vector<std::vector<int>> vv;
+  ranges::join_view j{vv};
+  auto jit = j.begin();
+  static_assert(noexcept(ranges::iter_move(jit)));
+  static_assert(noexcept(ranges::iter_swap(jit, jit)));
+}
+
 int
 main()
 {
@@ -258,4 +269,5 @@ main()
   test13();
   test14();
   test15();
+  test16();
 }