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

Reply via email to