Tested on x86_64-pc-linux-gnu, does this look OK for trunk?

-- >8 --

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 it 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.
---
 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:
-- 
2.50.1.271.gd30e120486

Reply via email to