libstdc++: Fix more missing uses of iter_difference_t [PR119820]

Message ID 20250915135855.2450790-1-jwakely@redhat.com
State Committed
Commit 0067696c6777f4917a262b7dadefa7fd110de26e
Headers
Series libstdc++: Fix more missing uses of iter_difference_t [PR119820] |

Commit Message

Jonathan Wakely Sept. 15, 2025, 1:57 p.m. UTC
  libstdc++-v3/ChangeLog:

	PR libstdc++/119820
	* include/bits/ranges_algo.h (__shuffle_fn): Use
	ranges::distance to get difference type value to add to
	iterator.
	* include/std/format (__formatter_str::_M_format_range):
	Use ranges::next to increment iterator by a size_t value.
---

Testing now on powerpc64le-linux.

 libstdc++-v3/include/bits/ranges_algo.h | 2 +-
 libstdc++-v3/include/std/format         | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
  

Comments

Patrick Palka Sept. 15, 2025, 2:30 p.m. UTC | #1
On Mon, 15 Sep 2025, Jonathan Wakely wrote:

> libstdc++-v3/ChangeLog:
> 
> 	PR libstdc++/119820
> 	* include/bits/ranges_algo.h (__shuffle_fn): Use
> 	ranges::distance to get difference type value to add to
> 	iterator.
> 	* include/std/format (__formatter_str::_M_format_range):
> 	Use ranges::next to increment iterator by a size_t value.

LGTM

> ---
> 
> Testing now on powerpc64le-linux.
> 
>  libstdc++-v3/include/bits/ranges_algo.h | 2 +-
>  libstdc++-v3/include/std/format         | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/libstdc++-v3/include/bits/ranges_algo.h b/libstdc++-v3/include/bits/ranges_algo.h
> index 6ec233f19df8..ea933be2f604 100644
> --- a/libstdc++-v3/include/bits/ranges_algo.h
> +++ b/libstdc++-v3/include/bits/ranges_algo.h
> @@ -2028,7 +2028,7 @@ namespace ranges
>  		      && !sized_sentinel_for<sentinel_t<_Range>,
>  					     iterator_t<_Range>>)
>  	  return (*this)(ranges::begin(__r),
> -			 ranges::begin(__r) + ranges::size(__r),
> +			 ranges::begin(__r) + ranges::distance(__r),
>  			 std::forward<_Gen>(__g));
>  	else
>  	  return (*this)(ranges::begin(__r), ranges::end(__r),
> diff --git a/libstdc++-v3/include/std/format b/libstdc++-v3/include/std/format
> index d6a2170e45d8..842972eed4ca 100644
> --- a/libstdc++-v3/include/std/format
> +++ b/libstdc++-v3/include/std/format
> @@ -1440,7 +1440,7 @@ namespace __format
>  	      else if constexpr (ranges::random_access_range<_Rg>)
>  		{
>  		  ranges::iterator_t<_Rg> __first = ranges::begin(__rg);
> -		  ranges::subrange __sub(__first, __first + __w);
> +		  ranges::subrange __sub(__first, ranges::next(__first, __w));
>  		  return _M_format_escaped(_String(from_range, __sub), __fc);
>  		}
>  	      else if (__w <= __n)
> -- 
> 2.51.0
> 
>
  

Patch

diff --git a/libstdc++-v3/include/bits/ranges_algo.h b/libstdc++-v3/include/bits/ranges_algo.h
index 6ec233f19df8..ea933be2f604 100644
--- a/libstdc++-v3/include/bits/ranges_algo.h
+++ b/libstdc++-v3/include/bits/ranges_algo.h
@@ -2028,7 +2028,7 @@  namespace ranges
 		      && !sized_sentinel_for<sentinel_t<_Range>,
 					     iterator_t<_Range>>)
 	  return (*this)(ranges::begin(__r),
-			 ranges::begin(__r) + ranges::size(__r),
+			 ranges::begin(__r) + ranges::distance(__r),
 			 std::forward<_Gen>(__g));
 	else
 	  return (*this)(ranges::begin(__r), ranges::end(__r),
diff --git a/libstdc++-v3/include/std/format b/libstdc++-v3/include/std/format
index d6a2170e45d8..842972eed4ca 100644
--- a/libstdc++-v3/include/std/format
+++ b/libstdc++-v3/include/std/format
@@ -1440,7 +1440,7 @@  namespace __format
 	      else if constexpr (ranges::random_access_range<_Rg>)
 		{
 		  ranges::iterator_t<_Rg> __first = ranges::begin(__rg);
-		  ranges::subrange __sub(__first, __first + __w);
+		  ranges::subrange __sub(__first, ranges::next(__first, __w));
 		  return _M_format_escaped(_String(from_range, __sub), __fc);
 		}
 	      else if (__w <= __n)