[gcc r16-3912] libstdc++: ranges::rotate should not use 'auto' with ranges::iter_move [PR121913]

Jonathan Wakely redi@gcc.gnu.org
Tue Sep 16 16:40:07 GMT 2025


https://gcc.gnu.org/g:412a1f78b53709ee60d7b17393cc3a9c9e0b973c

commit r16-3912-g412a1f78b53709ee60d7b17393cc3a9c9e0b973c
Author: Jonathan Wakely <jwakely@redhat.com>
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 <ppalka@redhat.com>

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)};


More information about the Libstdc++-cvs mailing list