aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Palka <ppalka@redhat.com>2025-09-05 13:14:16 -0400
committerPatrick Palka <ppalka@redhat.com>2025-09-05 13:14:16 -0400
commit8e971d665a9922a73de3a37ec8e04aea975e0993 (patch)
tree49b57b069dd596cf01ba8a0a7b9c5844658dffb0
parentdc20fa683d8cd46cc73407de1a24f1a2875102c5 (diff)
downloadgcc-8e971d665a9922a73de3a37ec8e04aea975e0993.zip
gcc-8e971d665a9922a73de3a37ec8e04aea975e0993.tar.gz
gcc-8e971d665a9922a73de3a37ec8e04aea975e0993.tar.bz2
libstdc++: Make join_view::_Iterator::_M_get_inner noexcept [PR121804]
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>
-rw-r--r--libstdc++-v3/include/std/ranges4
-rw-r--r--libstdc++-v3/testsuite/std/ranges/adaptors/join.cc12
2 files changed, 14 insertions, 2 deletions
diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges
index bae50d0..f493da5 100644
--- a/libstdc++-v3/include/std/ranges
+++ b/libstdc++-v3/include/std/ranges
@@ -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;
diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/join.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/join.cc
index a9395b4..db77490 100644
--- a/libstdc++-v3/testsuite/std/ranges/adaptors/join.cc
+++ b/libstdc++-v3/testsuite/std/ranges/adaptors/join.cc
@@ -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();
}