https://gcc.gnu.org/g:06e627e1e246e423bf2af754f9a1401cf6ae3c99

commit r16-3402-g06e627e1e246e423bf2af754f9a1401cf6ae3c99
Author: Patrick Palka <ppa...@redhat.com>
Date:   Tue Aug 26 15:45:57 2025 -0400

    libstdc++/ranges: Prefer using offset-based _CachedPosition
    
    The offset-based partial specialization of _CachedPosition for
    random-access iterators is currently only selected if the offset type is
    smaller than the iterator type.  Before r12-1018-g46ed811bcb4b86 this
    made sense since the main partial specialization only stored the
    iterator (incorrectly).  After that bugfix, the main partial
    specialization now effectively stores a std::optional<iter> so the
    size constraint is inaccurate.  And this main partial specialization
    must invalidate itself upon copy/move unlike the offset-based partial
    specialization.  So I think we should just always prefer the
    offset-based _CachedPosition for a random-access iterator, even if the
    offset type happens to be larger than the iterator type.
    
    libstdc++-v3/ChangeLog:
    
            * include/std/ranges (__detail::_CachedPosition): Remove
            additional size constraint on the offset-based partial
            specialization.
    
    Reviewed-by: Tomasz KamiƄski <tkami...@redhat.com>
    Reviewed-by: Jonathan Wakely <jwak...@redhat.com>

Diff:
---
 libstdc++-v3/include/std/ranges | 2 --
 1 file changed, 2 deletions(-)

diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges
index efe62969d657..2970b2cbe00b 100644
--- a/libstdc++-v3/include/std/ranges
+++ b/libstdc++-v3/include/std/ranges
@@ -1585,8 +1585,6 @@ namespace views::__adaptor
       };
 
     template<random_access_range _Range>
-      requires (sizeof(range_difference_t<_Range>)
-               <= sizeof(iterator_t<_Range>))
       struct _CachedPosition<_Range>
       {
       private:

Reply via email to