]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Uglify __mapping_alike template parameter and fix test and typo in comment.
authorTomasz Kamiński <tkaminsk@redhat.com>
Thu, 5 Jun 2025 08:40:10 +0000 (10:40 +0200)
committerTomasz Kamiński <tkaminsk@redhat.com>
Thu, 12 Jun 2025 09:57:14 +0000 (11:57 +0200)
When the static assert was generated from instantiations of default member
initializer of class B, the error was not generated for B<1, std::layout_left,
std::layout_left> case, only when -D_GLIBCXX_DEBUG was set. Changing B calls to
functions fixes that.

We also replace class with typename in template head of layout_right::mapping
constructors.

libstdc++-v3/ChangeLog:

* include/std/mdspan (__mdspan::__mapping_alike): Rename template
parameter from M to _M_p.
(layout_right::mapping): Replace class with typename in template
head.
(layout_stride::mapping): Fix typo in comment.
* testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc:
Changed B to function.

Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>
libstdc++-v3/include/std/mdspan
libstdc++-v3/testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc

index 4a3e863bed5f3900e25293c509cc48b94bbc0b29..6dc2441f80bd7c76d35db673e834a92bc345456b 100644 (file)
@@ -691,7 +691,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        : mapping(__other.extents(), __mdspan::__internal_ctor{})
        { }
 
-      template<class _OExtents>
+      template<typename _OExtents>
        requires (extents_type::rank() <= 1)
            && is_constructible_v<extents_type, _OExtents>
        constexpr explicit(!is_convertible_v<_OExtents, extents_type>)
@@ -699,7 +699,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        : mapping(__other.extents(), __mdspan::__internal_ctor{})
        { }
 
-      template<class _OExtents>
+      template<typename _OExtents>
        requires is_constructible_v<extents_type, _OExtents>
        constexpr explicit(extents_type::rank() > 0)
        mapping(const layout_stride::mapping<_OExtents>& __other) noexcept
@@ -780,16 +780,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   namespace __mdspan
   {
-    template<typename M>
+    template<typename _Mp>
       concept __mapping_alike = requires
       {
-       requires __is_extents<typename M::extents_type>;
-       { M::is_always_strided() } -> same_as<bool>;
-       { M::is_always_exhaustive() } -> same_as<bool>;
-       { M::is_always_unique() } -> same_as<bool>;
-       bool_constant<M::is_always_strided()>::value;
-       bool_constant<M::is_always_exhaustive()>::value;
-       bool_constant<M::is_always_unique()>::value;
+       requires __is_extents<typename _Mp::extents_type>;
+       { _Mp::is_always_strided() } -> same_as<bool>;
+       { _Mp::is_always_exhaustive() } -> same_as<bool>;
+       { _Mp::is_always_unique() } -> same_as<bool>;
+       bool_constant<_Mp::is_always_strided()>::value;
+       bool_constant<_Mp::is_always_exhaustive()>::value;
+       bool_constant<_Mp::is_always_unique()>::value;
       };
 
     template<typename _Mapping>
@@ -847,7 +847,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       mapping() noexcept
       {
        // The precondition is either statically asserted, or automatically
-       // satisfied because dynamic extents are zero-initialzied.
+       // satisfied because dynamic extents are zero-initialized.
        size_t __stride = 1;
        for (size_t __i = extents_type::rank(); __i > 0; --__i)
          {
index 70a25707cb2abe5c8bcfe2a8a7d7a3ea3c281221..7091153daba861250dea65acf590283b99be1a21 100644 (file)
@@ -18,7 +18,8 @@ template<typename Layout>
   };
 
 template<size_t Count, typename Layout, typename OLayout>
-  struct B
+  bool
+  B()
   {
     using Extents = std::extents<uint8_t, dyn, dyn, Count>;
     using OExtents = std::extents<uint16_t, n, 4, Count>;
@@ -27,20 +28,21 @@ template<size_t Count, typename Layout, typename OLayout>
     using OMapping = typename OLayout::mapping<OExtents>;
 
     Mapping m{OMapping{}};
+    return true;
   };
 
 A<std::layout_left> a_left;                      // { dg-error "required from" }
 A<std::layout_right> a_right;                    // { dg-error "required from" }
 A<std::layout_stride> a_stride;                  // { dg-error "required from" }
 
-B<1, std::layout_left, std::layout_left> b0;     // { dg-error "required here" }
-B<2, std::layout_left, std::layout_stride> b1;   // { dg-error "required here" }
+auto b1 = B<1, std::layout_left, std::layout_left>();     // { dg-error "required from" }
+auto b2 = B<2, std::layout_left, std::layout_stride>();   // { dg-error "required from" }
 
-B<3, std::layout_right, std::layout_right> b2;   // { dg-error "required here" }
-B<4, std::layout_right, std::layout_stride> b3;  // { dg-error "required here" }
+auto b3 = B<3, std::layout_right, std::layout_right>();   // { dg-error "required from" }
+auto b4 = B<4, std::layout_right, std::layout_stride>();  // { dg-error "required from" }
 
-B<5, std::layout_stride, std::layout_right> b4;  // { dg-error "required here" }
-B<6, std::layout_stride, std::layout_left> b5;   // { dg-error "required here" }
-B<7, std::layout_stride, std::layout_stride> b6; // { dg-error "required here" }
+auto b5 = B<5, std::layout_stride, std::layout_right>();  // { dg-error "required from" }
+auto b6 = B<6, std::layout_stride, std::layout_left>();   // { dg-error "required from" }
+auto b7 = B<7, std::layout_stride, std::layout_stride>(); // { dg-error "required from" }
 
 // { dg-prune-output "must be representable as index_type" }