On Tue, 19 Aug 2025 at 16:20, Patrick Palka <ppa...@redhat.com> wrote:
>
> On Wed, 16 Jul 2025, Tomasz Kaminski wrote:
>
> >
> >
> > On Tue, Jul 15, 2025 at 9:51 PM Patrick Palka <ppa...@redhat.com> wrote:
> >       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,
> >
> > optional<Iterator> is still smaller than 2 * sizeof(Iterator), so the 
> > constraints
> > could be updated to range::difference <= 2 * sizeof(Iterator) or <= 
> > sizeof(non_propagating_cache).
> >
> > However, having a range::difference_t being larger than iterator, should be
> > unusual, as the iterator must be able to represent as many positions as the 
> > difference
> > type. So except for cases like repeat, they should be similar size. I do 
> > not think
> > it is worth optimizing for that.
> >
> > I think it is easier for users if the caching rules are simplified, and 
> > does not depend
> > on size.
> >
> >       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.
> >       ---
> >
> > Given the above LGTM.
>
> Thanks, Tomasz!  Is this OK to push?


OK for trunk


>
> >        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