]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: ranges::rotate should not use 'auto' with ranges::iter_move [PR121913]
authorJonathan Wakely <jwakely@redhat.com>
Thu, 11 Sep 2025 16:39:43 +0000 (17:39 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Tue, 16 Sep 2025 16:38:56 +0000 (17:38 +0100)
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>
libstdc++-v3/include/bits/ranges_algo.h

index ea933be2f604e58e49599cce7b880c3a0e548c1b..4025bba9f2048cc1f7db98d0c6f4467eac2f5c83 100644 (file)
@@ -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)};