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