On Tue, 16 Sep 2025, Jonathan Wakely wrote:

> The r16-3835-g7801236069a95c change to use ranges::iter_move should also
> have used iter_value_t<_Iter> to ensure we get an object of the value
> type, not a proxy reference.
> 
> libstdc++-v3/ChangeLog:
> 
>       PR libstdc++/121913
>       * include/bits/ranges_algo.h (__rotate_fn::operator()): Use
>       auto_value_t<_Iter> instead of deduced type.

Stale subject line? LGTM besides that

> ---
> 
> Tested powerpc64le-linux.
> 
>  libstdc++-v3/include/bits/ranges_algo.h | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/libstdc++-v3/include/bits/ranges_algo.h 
> b/libstdc++-v3/include/bits/ranges_algo.h
> index ea933be2f604..4025bba9f204 100644
> --- a/libstdc++-v3/include/bits/ranges_algo.h
> +++ b/libstdc++-v3/include/bits/ranges_algo.h
> @@ -1685,7 +1685,7 @@ namespace ranges
>                       {
>                         auto __mid = ranges::next(__p, __n - 1);
>                         auto __end = ranges::next(__mid);
> -                       auto __t = ranges::iter_move(__p);
> +                       iter_value_t<_Iter> __t(ranges::iter_move(__p));
>                         ranges::move(ranges::next(__p), __end, __p);
>                         *__mid = std::move(__t);
>                         return {std::move(__ret), std::move(__lasti)};
> @@ -1713,7 +1713,7 @@ namespace ranges
>                       {
>                         auto __mid = ranges::next(__p, __n - 1);
>                         auto __end = ranges::next(__mid);
> -                       auto __t = ranges::iter_move(__mid);
> +                       iter_value_t<_Iter> __t(ranges::iter_move(__mid));
>                         ranges::move_backward(__p, __mid, __end);
>                         *__p = std::move(__t);
>                         return {std::move(__ret), std::move(__lasti)};
> -- 
> 2.51.0
> 
> 

Reply via email to