[PATCH] libstdc++: Make join_view::_Iterator::_M_get_inner noexcept [PR121804]

Tomasz Kaminski tkaminsk@redhat.com
Fri Sep 5 14:45:09 GMT 2025


On Fri, Sep 5, 2025 at 4:28 PM Patrick Palka <ppalka@redhat.com> wrote:

> Tested on x86_64-pc-linux-gnu, does this look OK for trunk?
>
Yes, I have seen bugzilla today, and this looks like an obvious fix.

>
> -- >8 --
>
> 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.
>
> libstdc++-v3/ChangeLog:
>
>         * include/std/ranges (join_view::_Iterator::_M_get_inner):
>         Mark noexcept.
>         * testsuite/std/ranges/adaptors/join.cc (test16): New test.
> ---
>  libstdc++-v3/include/std/ranges                    |  4 ++--
>  libstdc++-v3/testsuite/std/ranges/adaptors/join.cc | 11 +++++++++++
>  2 files changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/libstdc++-v3/include/std/ranges
> b/libstdc++-v3/include/std/ranges
> index bae50d06ca81..f493da56203b 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 a9395b489919..50b8e355f904 100644
> --- a/libstdc++-v3/testsuite/std/ranges/adaptors/join.cc
> +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/join.cc
> @@ -240,6 +240,16 @@ 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)));
> +}
> +
>  int
>  main()
>  {
> @@ -258,4 +268,5 @@ main()
>    test13();
>    test14();
>    test15();
> +  test16();
>  }
> --
> 2.51.0.167.g6ad8021821
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://gcc.gnu.org/pipermail/libstdc++/attachments/20250905/f14b04ef/attachment.htm>


More information about the Libstdc++ mailing list