The standard uses the same feature testing macro for both padded layouts
and submdspan. Since submdspan support is complete, we can now remove
the internal feature testing macro.

libstdc++-v3/ChangeLog:

        * include/bits/version.def (padded_layouts): Remove internal
        feature testing macro.
        * include/bits/version.h: Regenerate.
        * include/std/mdspan: Replace __glibcxx_padded_layouts with
        __glibcxx_submdspan.
        * src/c++23/std.cc.in: Ditto.

Signed-off-by: Luc Grosheintz <[email protected]>
---
 libstdc++-v3/include/bits/version.def | 10 ----------
 libstdc++-v3/include/bits/version.h   |  9 ---------
 libstdc++-v3/include/std/mdspan       | 26 +++++++++++---------------
 libstdc++-v3/src/c++23/std.cc.in      |  4 +---
 4 files changed, 12 insertions(+), 37 deletions(-)

diff --git a/libstdc++-v3/include/bits/version.def 
b/libstdc++-v3/include/bits/version.def
index 29ecf15c7e3..394ebf4c989 100644
--- a/libstdc++-v3/include/bits/version.def
+++ b/libstdc++-v3/include/bits/version.def
@@ -1067,30 +1067,20 @@ ftms = {
 ftms = {
   name = aligned_accessor;
   values = {
     v = 202411;
     cxxmin = 26;
     extra_cond = "__glibcxx_assume_aligned "
     "&& __glibcxx_is_sufficiently_aligned";
     };
 };
 
-// Purely internal macro padded layouts.
-ftms = {
-  name = padded_layouts;
-  no_stdname = true; // internal
-  values = {
-    v = 1;
-    cxxmin = 26;
-  };
-};
-
 ftms = {
   name = submdspan;
   no_stdname = true; // TODO: change once complete
   values = {
     v = 1;
     cxxmin = 26;
   };
 };
 
 ftms = {
diff --git a/libstdc++-v3/include/bits/version.h 
b/libstdc++-v3/include/bits/version.h
index 5901d27113d..141c90d47ce 100644
--- a/libstdc++-v3/include/bits/version.h
+++ b/libstdc++-v3/include/bits/version.h
@@ -1196,29 +1196,20 @@
 #if !defined(__cpp_lib_aligned_accessor)
 # if (__cplusplus >  202302L) && (__glibcxx_assume_aligned && 
__glibcxx_is_sufficiently_aligned)
 #  define __glibcxx_aligned_accessor 202411L
 #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_aligned_accessor)
 #   define __cpp_lib_aligned_accessor 202411L
 #  endif
 # endif
 #endif /* !defined(__cpp_lib_aligned_accessor) */
 #undef __glibcxx_want_aligned_accessor
 
-#if !defined(__cpp_lib_padded_layouts)
-# if (__cplusplus >  202302L)
-#  define __glibcxx_padded_layouts 1L
-#  if defined(__glibcxx_want_all) || defined(__glibcxx_want_padded_layouts)
-#  endif
-# endif
-#endif /* !defined(__cpp_lib_padded_layouts) */
-#undef __glibcxx_want_padded_layouts
-
 #if !defined(__cpp_lib_submdspan)
 # if (__cplusplus >  202302L)
 #  define __glibcxx_submdspan 1L
 #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_submdspan)
 #  endif
 # endif
 #endif /* !defined(__cpp_lib_submdspan) */
 #undef __glibcxx_want_submdspan
 
 #if !defined(__cpp_lib_ssize)
diff --git a/libstdc++-v3/include/std/mdspan b/libstdc++-v3/include/std/mdspan
index 15052452425..cd2aebb4991 100644
--- a/libstdc++-v3/include/std/mdspan
+++ b/libstdc++-v3/include/std/mdspan
@@ -660,21 +660,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     template<typename _Extents>
       class mapping;
   };
 
   struct layout_stride
   {
     template<typename _Extents>
       class mapping;
   };
 
-#ifdef __glibcxx_padded_layouts
+#ifdef __glibcxx_submdspan
   template<size_t _PaddingValue>
     struct layout_left_padded
     {
       template<typename _Extents>
        class mapping;
     };
 
   template<size_t _PaddingValue>
     struct layout_right_padded
     {
@@ -783,21 +783,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     template<typename _Layout, typename _Mapping>
       concept __mapping_of =
        is_same_v<typename _Layout::template mapping<
                    typename _Mapping::extents_type>,
                  _Mapping>;
 
     template<template<size_t> typename _Layout, typename _Mapping>
       concept __padded_mapping_of = __mapping_of<
        _Layout<_Mapping::padding_value>, _Mapping>;
 
-#ifdef __glibcxx_padded_layouts
+#ifdef __glibcxx_submdspan
     template<typename _Mapping>
       constexpr bool __is_left_padded_mapping = __padded_mapping_of<
        layout_left_padded, _Mapping>;
 
     template<typename _Mapping>
       constexpr bool __is_right_padded_mapping = __padded_mapping_of<
        layout_right_padded, _Mapping>;
 
     template<typename _Mapping>
       constexpr bool __is_padded_mapping = __is_left_padded_mapping<_Mapping>
@@ -806,21 +806,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
     template<typename _PaddedMapping>
       consteval size_t
       __get_static_stride()
       { return _PaddedMapping::_PaddedStorage::_S_static_stride; }
 
     template<typename _Mapping>
       concept __standardized_mapping = __mapping_of<layout_left, _Mapping>
                                       || __mapping_of<layout_right, _Mapping>
                                       || __mapping_of<layout_stride, _Mapping>
-#ifdef __glibcxx_padded_layouts
+#ifdef __glibcxx_submdspan
                                       || __is_left_padded_mapping<_Mapping>
                                       || __is_right_padded_mapping<_Mapping>
 #endif
                                       ;
 
     // A tag type to create internal ctors.
     class __internal_ctor
     { };
 
     template<typename _Mapping>
@@ -1558,21 +1558,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        { }
 
       // noexcept for consistency with other layouts.
       template<typename _OExtents>
        requires is_constructible_v<extents_type, _OExtents>
        constexpr explicit(extents_type::rank() > 0)
        mapping(const layout_stride::mapping<_OExtents>& __other) noexcept
        : mapping(__other.extents(), __mdspan::__internal_ctor{})
        { __glibcxx_assert(*this == __other); }
 
-#if __glibcxx_padded_layouts
+#if __glibcxx_submdspan
       template<typename _LeftpadMapping>
        requires __mdspan::__is_left_padded_mapping<_LeftpadMapping>
                 && is_constructible_v<extents_type,
                                       typename _LeftpadMapping::extents_type>
        constexpr
        explicit(!is_convertible_v<typename _LeftpadMapping::extents_type,
                                   extents_type>)
        mapping(const _LeftpadMapping& __other) noexcept
        : mapping(__other.extents(), __mdspan::__internal_ctor{})
        {
@@ -1582,21 +1582,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
          if constexpr (extents_type::rank() > 1)
            {
              if constexpr (extents_type::static_extent(0) != dynamic_extent
                            && __ostride_sta != dynamic_extent)
                static_assert(extents_type::static_extent(0) == __ostride_sta);
              else
                __glibcxx_assert(__other.stride(1)
                    == __other.extents().extent(0));
            }
        }
-#endif // __glibcxx_padded_layouts
+#endif
 
       constexpr mapping&
       operator=(const mapping&) noexcept = default;
 
       constexpr const extents_type&
       extents() const noexcept { return _M_extents; }
 
       constexpr index_type
       required_span_size() const noexcept
       { return __mdspan::__size(_M_extents); }
@@ -1655,21 +1655,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
            "The size of OtherExtents must be representable as index_type");
          __glibcxx_assert(__mdspan::__is_representable_extents(_M_extents));
        }
 
 #if __glibcxx_submdspan
       template<__mdspan::__valid_canonical_slice_type<index_type>... _Slices>
        requires (extents_type::rank() == sizeof...(_Slices))
        friend constexpr auto
        submdspan_mapping(const mapping& __mapping, _Slices... __slices)
        { return __mdspan::__submdspan_mapping_impl(__mapping, __slices...); }
-#endif // __glibcxx_submdspan
+#endif
 
        [[no_unique_address]] extents_type _M_extents{};
     };
 
   namespace __mdspan
   {
     template<typename _Extents, typename... _Indices>
       constexpr typename _Extents::index_type
       __linear_index_right(const _Extents& __exts, _Indices... __indices)
       noexcept
@@ -1733,21 +1733,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        : mapping(__other.extents(), __mdspan::__internal_ctor{})
        { }
 
       template<typename _OExtents>
        requires is_constructible_v<extents_type, _OExtents>
        constexpr explicit(extents_type::rank() > 0)
        mapping(const layout_stride::mapping<_OExtents>& __other) noexcept
        : mapping(__other.extents(), __mdspan::__internal_ctor{})
        { __glibcxx_assert(*this == __other); }
 
-#if __glibcxx_padded_layouts
+#if __glibcxx_submdspan
       template<typename _RightPaddedMapping>
        requires __mdspan::__is_right_padded_mapping<_RightPaddedMapping>
                 && is_constructible_v<extents_type,
                      typename _RightPaddedMapping::extents_type>
        constexpr
        explicit(!is_convertible_v<typename _RightPaddedMapping::extents_type,
                                   extents_type>)
        mapping(const _RightPaddedMapping& __other) noexcept
        : mapping(__other.extents(), __mdspan::__internal_ctor{})
        {
@@ -1833,27 +1833,27 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       template<typename _OExtents>
        constexpr explicit
        mapping(const _OExtents& __oexts, __mdspan::__internal_ctor) noexcept
        : _M_extents(__oexts)
        {
          static_assert(__mdspan::__representable_size<_OExtents, index_type>,
            "The size of OtherExtents must be representable as index_type");
          __glibcxx_assert(__mdspan::__is_representable_extents(_M_extents));
        }
 
-#if __glibcxx_padded_layouts
+#if __glibcxx_submdspan
       template<__mdspan::__valid_canonical_slice_type<index_type>... _Slices>
        requires (extents_type::rank() == sizeof...(_Slices))
        friend constexpr auto
        submdspan_mapping(const mapping& __mapping, _Slices... __slices)
        { return __mdspan::__submdspan_mapping_impl(__mapping, __slices...); }
-#endif // __glibcxx_submdspan
+#endif
 
        [[no_unique_address]] extents_type _M_extents{};
     };
 
   namespace __mdspan
   {
     template<typename _Mp>
       concept __mapping_alike = requires
       {
        requires __is_extents<typename _Mp::extents_type>;
@@ -2082,21 +2082,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        submdspan_mapping(const mapping& __mapping, _Slices... __slices)
        { return __mapping._M_submdspan_mapping_impl(__slices...); }
 #endif
 
       using _Strides = typename __array_traits<index_type,
                                               extents_type::rank()>::_Type;
       [[no_unique_address]] extents_type _M_extents;
       [[no_unique_address]] _Strides _M_strides;
     };
 
-#ifdef __glibcxx_padded_layouts
+#ifdef __glibcxx_submdspan
   namespace __mdspan
   {
     constexpr size_t
     __least_multiple(size_t __x, size_t __y)
     {
       if (__x <= 1)
        return __y;
       return (__y / __x + (__y % __x != 0)) * __x ;
     }
 
@@ -2684,27 +2684,25 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
        template<typename _LeftpadMapping>
          requires(__mdspan::__is_left_padded_mapping<_LeftpadMapping>
                   && _LeftpadMapping::extents_type::rank() == _S_rank)
          friend constexpr bool
          operator==(const mapping& __self, const _LeftpadMapping& __other)
          noexcept
          { return __self._M_storage._M_equal(__other); }
 
       private:
-#if __glibcxx_submdspan
        template<__mdspan::__valid_canonical_slice_type<index_type>... _Slices>
          requires (extents_type::rank() == sizeof...(_Slices))
          friend constexpr auto
          submdspan_mapping(const mapping& __mapping, _Slices... __slices)
          { return __mdspan::__submdspan_mapping_impl(__mapping, __slices...); }
-#endif // __glibcxx_submdspan
       };
 
   template<size_t _PaddingValue>
     template<typename _Extents>
       class layout_right_padded<_PaddingValue>::mapping {
       public:
        static constexpr size_t padding_value = _PaddingValue;
        using extents_type = _Extents;
        using index_type = typename extents_type::index_type;
        using size_type = typename extents_type::size_type;
@@ -2857,30 +2855,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        }
 
        template<typename _RightPaddedMapping>
          requires(__mdspan::__is_right_padded_mapping<_RightPaddedMapping>
                   && _RightPaddedMapping::extents_type::rank() == _S_rank)
          friend constexpr bool
          operator==(const mapping& __self, const _RightPaddedMapping& __other)
          noexcept
          { return __self._M_storage._M_equal(__other); }
 
-#if __glibcxx_submdspan
       private:
        template<__mdspan::__valid_canonical_slice_type<index_type>... _Slices>
          requires (extents_type::rank() == sizeof...(_Slices))
          friend constexpr auto
          submdspan_mapping(const mapping& __mapping, _Slices... __slices)
          { return __mdspan::__submdspan_mapping_impl(__mapping, __slices...); }
-#endif // __glibcxx_submdspan
       };
-#endif // __glibcxx_padded_layouts
+#endif // __glibcxx_submdspan
 
   template<typename _ElementType>
     struct default_accessor
     {
       static_assert(!is_array_v<_ElementType>,
        "ElementType must not be an array type");
       static_assert(!is_abstract_v<_ElementType>,
        "ElementType must not be an abstract class type");
 
       using offset_policy = default_accessor;
diff --git a/libstdc++-v3/src/c++23/std.cc.in b/libstdc++-v3/src/c++23/std.cc.in
index 2dac6a6d887..411db19f616 100644
--- a/libstdc++-v3/src/c++23/std.cc.in
+++ b/libstdc++-v3/src/c++23/std.cc.in
@@ -1867,25 +1867,23 @@ export namespace std
   using std::dims;
 #endif
   using std::layout_left;
   using std::layout_right;
   using std::layout_stride;
   using std::default_accessor;
 #if __glibcxx_aligned_accessor
   using std::aligned_accessor;
 #endif
   using std::mdspan;
-#if __glibcxx_padded_layouts
+#if __glibcxx_submdspan
   using std::layout_left_padded;
   using std::layout_right_padded;
-#endif
-#if __glibcxx_submdspan
   using std::strided_slice;
   using std::full_extent_t;
   using std::full_extent;
   using std::submdspan_mapping_result;
   using std::submdspan_canonicalize_slices;
   using std::submdspan_extents;
   using std::submdspan;
 #endif
 }
 #endif
-- 
2.51.2

Reply via email to