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>
}
constexpr _Inner_iter&
- _M_get_inner()
+ _M_get_inner() noexcept
{
if constexpr (forward_iterator<_Inner_iter>)
return _M_inner;
}
constexpr const _Inner_iter&
- _M_get_inner() const
+ _M_get_inner() const noexcept
{
if constexpr (forward_iterator<_Inner_iter>)
return _M_inner;
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()
{
test13();
test14();
test15();
+ test16();
}