https://gcc.gnu.org/g:412a1f78b53709ee60d7b17393cc3a9c9e0b973c
commit r16-3912-g412a1f78b53709ee60d7b17393cc3a9c9e0b973c Author: Jonathan Wakely <[email protected]> Date: Thu Sep 11 17:39:43 2025 +0100 libstdc++: ranges::rotate should not use 'auto' with ranges::iter_move [PR121913] 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. Reviewed-by: Patrick Palka <[email protected]> Diff: --- 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)};
