Changes since v1: - Use cmp_* when comparing two integers of differnt types. - Remove the FTM submdspan and replace it with an unofficial purely internal FTM called padded_layouts. - Make __get_static_stride consteval. - Make __is_*_padded_layout only available inside __glibcxx_padded_layout regions. - Use size_t for __least_multiple_at_least. - Implement checks (mandate and prerequisite) for representable padded static stride. - Implement checks for representable padded "size", i.e. the product of padded extents. This product might be larger than the required_span_size, but the standard requires the product to be representable (not just required_span_size). - New overload for __static_extents(__begin, __end). - Remove the double checked prerequisite. - Skip some calculations for static first stride (2x). - Replace array<..., ...> with _Stride. - s/_S_stride_type/_Stride - Test additional cases for default ctor. - Rename ConversionRule::Conventional to Regular. - Remove empty file testsuite/mdspan/layouts/debug/padded_neg.cc. - Ensure all tests are run. - Test remaining prerequisite in mapping(layout_stride).
I also noticed that some of the changes can be split into separate commits. Luc Grosheintz (5): libstdc++: Refactor layout mapping tests to use a concept. libstdc++: Fix bug in layout mapping tests. libstdc++: Prepare mapping layout tests for left padded. libstdc++: Refactor __mdspan::__static_quotient. libstdc++: Implement std::layout_left_padded. libstdc++-v3/include/bits/version.def | 10 + libstdc++-v3/include/bits/version.h | 9 + libstdc++-v3/include/std/mdspan | 541 +++++++++++++++- libstdc++-v3/src/c++23/std.cc.in | 8 +- .../mdspan/layouts/class_mandate_neg.cc | 1 + .../23_containers/mdspan/layouts/ctors.cc | 61 +- .../mdspan/layouts/debug/padded_neg.cc | 22 + .../23_containers/mdspan/layouts/empty.cc | 12 +- .../23_containers/mdspan/layouts/mapping.cc | 204 ++++-- .../23_containers/mdspan/layouts/padded.cc | 611 ++++++++++++++++++ .../mdspan/layouts/padded_neg.cc | 280 ++++++++ 11 files changed, 1692 insertions(+), 67 deletions(-) create mode 100644 libstdc++-v3/testsuite/23_containers/mdspan/layouts/debug/padded_neg.cc create mode 100644 libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded.cc create mode 100644 libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_neg.cc -- 2.50.1