The second iteration of this patch series is available here:
https://gcc.gnu.org/pipermail/libstdc++/2025-April/060988.html

Thank you for the reviews.

On 4/9/25 9:23 AM, Luc Grosheintz wrote:
Hi,

This is a patch series that implements std::extents from <mdspan>.

I've never contributed to GCC or libstdc++. Hence, any comments about
obvious issues, e.g. too few/many tests, not following conventions
w.r.t. checking prerequisites, use of 'friend class', choice of uglified
names that could clash with other of our uglified names, etc. will be
very well received. In a similar vein let me know if you want the patch
series split differently.

If you deem this an effective way of implementing <mdspan>, I would work
on std::layout_*, std::accessor_default and eventually std::mdspan.

Each commit was tested with 'make check-target-libstdc++-v3' on x86_64.

Thank you!

Luc Grosheintz (4):
   libstdc++: Setup internal FTM for mdspan.
   libstdc++: Add header mdspan to the build-system.
   libstdc++: Implement std::extents [PR107761].
   libstdc++: Add tests for std::extents.

  libstdc++-v3/doc/doxygen/user.cfg.in          |   1 +
  libstdc++-v3/include/Makefile.am              |   1 +
  libstdc++-v3/include/Makefile.in              |   1 +
  libstdc++-v3/include/bits/version.def         |   9 +
  libstdc++-v3/include/bits/version.h           |  10 +
  libstdc++-v3/include/precompiled/stdc++.h     |   4 +
  libstdc++-v3/include/std/mdspan               | 448 ++++++++++++++++++
  libstdc++-v3/src/c++23/std.cc.in              |   6 +-
  .../mdspan/extents/assign_copy.cc             |  26 +
  .../mdspan/extents/assign_copy_01_neg.cc      |  15 +
  .../mdspan/extents/class_traits.cc            |  20 +
  .../23_containers/mdspan/extents/ctor_copy.cc |  34 ++
  .../mdspan/extents/ctor_copy_01_neg.cc        |  10 +
  .../mdspan/extents/ctor_copy_02_neg.cc        |  10 +
  .../mdspan/extents/ctor_copy_constexpr.cc     |  20 +
  .../mdspan/extents/ctor_copy_implicit_00.cc   |  28 ++
  .../mdspan/extents/ctor_copy_implicit_01.cc   |  22 +
  .../extents/ctor_copy_implicit_02_neg.cc      |  10 +
  .../extents/ctor_copy_implicit_03_neg.cc      |   9 +
  .../extents/ctor_copy_implicit_04_neg.cc      |   9 +
  .../mdspan/extents/ctor_ints_00.cc            |  30 ++
  .../mdspan/extents/ctor_ints_01.cc            |  24 +
  .../mdspan/extents/ctor_ints_02_neg.cc        |   9 +
  .../mdspan/extents/ctor_ints_03_neg.cc        |   9 +
  .../mdspan/extents/ctor_ints_constexpr.cc     |  12 +
  .../extents/ctor_ints_implicit_00_neg.cc      |   9 +
  .../extents/ctor_ints_implicit_01_neg.cc      |   9 +
  .../mdspan/extents/ctor_shape_00.cc           |  35 ++
  .../mdspan/extents/ctor_shape_01.cc           |  17 +
  .../mdspan/extents/ctor_shape_02_neg.cc       |  10 +
  .../mdspan/extents/ctor_shape_03_neg.cc       |  11 +
  .../mdspan/extents/ctor_shape_constexpr.cc    |  23 +
  .../mdspan/extents/ctor_shape_implicit_00.cc  |  42 ++
  .../mdspan/extents/ctor_shape_implicit_01.cc  |  19 +
  .../extents/ctor_shape_implicit_02_neg.cc     |  11 +
  .../extents/ctor_shape_implicit_03_neg.cc     |  12 +
  .../mdspan/extents/ctor_shape_implicit_04.cc  |  24 +
  .../mdspan/extents/custom_integer.cc          |  86 ++++
  .../mdspan/extents/deduction_guide_00.cc      |  23 +
  .../mdspan/extents/deduction_guide_01_neg.cc  |  10 +
  .../23_containers/mdspan/extents/dextents.cc  |  11 +
  .../23_containers/mdspan/extents/extent.cc    |  27 ++
  .../mdspan/extents/index_type.cc              |  14 +
  .../23_containers/mdspan/extents/ops_eq.cc    |  58 +++
  .../23_containers/mdspan/extents/rank.cc      |  10 +
  .../mdspan/extents/rank_dynamic.cc            |  11 +
  .../mdspan/extents/rank_return_type.cc        |  14 +
  .../23_containers/mdspan/extents/rank_type.cc |   7 +
  .../23_containers/mdspan/extents/size_type.cc |  16 +
  .../23_containers/mdspan/extents/sizeof.cc    |  10 +
  .../mdspan/extents/static_extent.cc           |  15 +
  51 files changed, 1310 insertions(+), 1 deletion(-)
  create mode 100644 libstdc++-v3/include/std/mdspan
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/assign_copy.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/assign_copy_01_neg.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/class_traits.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_copy.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_copy_01_neg.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_copy_02_neg.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_copy_constexpr.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_copy_implicit_00.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_copy_implicit_01.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_copy_implicit_02_neg.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_copy_implicit_03_neg.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_copy_implicit_04_neg.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints_00.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints_01.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints_02_neg.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints_03_neg.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints_constexpr.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints_implicit_00_neg.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints_implicit_01_neg.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape_00.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape_01.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape_02_neg.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape_03_neg.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape_constexpr.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape_implicit_00.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape_implicit_01.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape_implicit_02_neg.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape_implicit_03_neg.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape_implicit_04.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/custom_integer.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/deduction_guide_00.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/deduction_guide_01_neg.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/dextents.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/extent.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/index_type.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/ops_eq.cc
  create mode 100644 libstdc++-v3/testsuite/23_containers/mdspan/extents/rank.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/rank_dynamic.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/rank_return_type.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/rank_type.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/size_type.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/sizeof.cc
  create mode 100644 
libstdc++-v3/testsuite/23_containers/mdspan/extents/static_extent.cc


Reply via email to