Since, I believe now we're through the larger questions about how to implement layouts. If reviewing all three over and over is too painful, it might now make sense to split the patch into separate patches, one per layout.
On 5/26/25 16:04, Luc Grosheintz wrote:
This follows up on: https://gcc.gnu.org/pipermail/libstdc++/2025-May/061572.html Note that this patch series can only be applied after merging: https://gcc.gnu.org/pipermail/libstdc++/2025-May/061653.html The important changes since v3 are: * Fixed and testsed several related overflow issues that occured in extents of size 0 by using `size_t` to compute products. * Fixed and tested default ctors. * Add missing code for module support. * Documented deviation from standard. The smaller changes include: * Squashed the three small commits that make cosmetic changes to std::extents. * Remove layout_left related changes from the layout_stride commit. * Remove superfluous `mapping(extents_type(__exts))`. * Fix indenting and improve comment in layout_stride. * Add an easy check for representable required_span_size to layout_stride. * Inline __dynamic_extents_prod Thank you Tomasz for all the great reviews! Luc Grosheintz (8): libstdc++: Improve naming and whitespace for extents. libstdc++: Implement layout_left from mdspan. libstdc++: Add tests for layout_left. libstdc++: Implement layout_right from mdspan. libstdc++: Add tests for layout_right. libstdc++: Implement layout_stride from mdspan. libstdc++: Add tests for layout_stride. libstdc++: Make layout_left(layout_stride) noexcept. libstdc++-v3/include/std/mdspan | 711 +++++++++++++++++- libstdc++-v3/src/c++23/std.cc.in | 5 +- .../mdspan/layouts/class_mandate_neg.cc | 42 ++ .../23_containers/mdspan/layouts/ctors.cc | 459 +++++++++++ .../23_containers/mdspan/layouts/empty.cc | 78 ++ .../23_containers/mdspan/layouts/mapping.cc | 568 ++++++++++++++ .../23_containers/mdspan/layouts/stride.cc | 500 ++++++++++++ 7 files changed, 2349 insertions(+), 14 deletions(-) create mode 100644 libstdc++-v3/testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc create mode 100644 libstdc++-v3/testsuite/23_containers/mdspan/layouts/ctors.cc create mode 100644 libstdc++-v3/testsuite/23_containers/mdspan/layouts/empty.cc create mode 100644 libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc create mode 100644 libstdc++-v3/testsuite/23_containers/mdspan/layouts/stride.cc