[Bug libstdc++/123211] Consider specializing ranges::distance for join_view

"cvs-commit at gcc dot gnu.org via Gcc-bugs" <[email protected]>
Newsgroups gmane.comp.gcc.bugs
Message-ID <[email protected]/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123211

--- Comment #5 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Patrick Palka <[email protected]>:

https://gcc.gnu.org/g:133a57041f2d000f4089006770f10dc5c21ced04

commit r17-2858-g133a57041f2d000f4089006770f10dc5c21ced04
Author: Patrick Palka <[email protected]>
Date:   Fri Jul 31 14:54:12 2026 -0400

    libstdc++: Introduce segmented iterator concept and traversal

    This patch defines a new utility function std::__for_each_segment for
    iterating over "segmented" iterators, i.e. iterators for ranges composed
    of sub-ranges.  Such iterators must provide a static member function
    _S_for_each_segment implementing traversal over their segments via a
    callback function.  This patch implements such traversal for iterators
    of std::deque, ranges::join_view and ranges::concat_view.

            PR libstdc++/123211

    libstdc++-v3/ChangeLog:

            * include/bits/stl_deque.h (_Deque_iterator::_S_for_each_segment):
            Define.
            (_Deque_iterator::_S_enable_for_each_segment): Define.
            * include/bits/stl_iterator_base_funcs.h: Include <bits/move.h>.
            (__for_each_segment): Define.
            * include/bits/stl_iterator_base_types.h: Include
            <ext/type_traits.h> in C++98 mode.
            (__enable_for_each_segment): Define.
            (__segmented_iterator): Define in C++20.
            * include/debug/safe_iterator.h
            (_Safe_iterator::_S_for_each_segment): Define.
            (_Safe_iterator::_S_enable_for_each_segment): Define.
            * include/std/ranges (join_view::_Iterator::_Iterator): New
            constructor taking both an inner and outer iterator.
            (join_view::_Iterator::_S_for_each_segment): Define.
            (join_view::_Iterator::_S_enable_for_each_segment): Define.
            (concat_view::_Iterator::_S_for_each_segment): Define.
            (concat_view::_Iterator::_S_enable_for_each_segment): Define.
            * testsuite/23_containers/deque/for_each_segment.cc: New test.
            * testsuite/std/ranges/adaptors/join/for_each_segment.cc: New test.
            * testsuite/std/ranges/concat/for_each_segment.cc: New test.

    Reviewed-by: Jonathan Wakely <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.