The left padded layout is a template class. In order to be able to use
partially specializes templates, functions need to be converted structs.
libstdc++-v3/ChangeLog:
* testsuite/23_containers/mdspan/layouts/mapping.cc
(test_stride_2d): Rewrite using a struct.
(test_stride_3d): Ditto.
Signed-off-by: Luc Grosheintz <[email protected]>
---
.../23_containers/mdspan/layouts/mapping.cc | 119 +++++++++++-------
1 file changed, 75 insertions(+), 44 deletions(-)
diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc
b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc
index 1d9b7a27f28..db15e2a48f3 100644
--- a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc
+++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc
@@ -330,73 +330,104 @@ template<>
}
template<typename Layout>
- constexpr void
- test_stride_2d();
+struct TestStride2D;
template<>
- constexpr void
- test_stride_2d<std::layout_left>()
+ struct TestStride2D<std::layout_left>
{
- std::layout_left::mapping<std::extents<int, 3, 5>> m;
- VERIFY(m.stride(0) == 1);
- VERIFY(m.stride(1) == 3);
- }
+ static constexpr void
+ run()
+ {
+ std::layout_left::mapping<std::extents<int, 3, 5>> m;
+ VERIFY(m.stride(0) == 1);
+ VERIFY(m.stride(1) == 3);
+ }
+ };
template<>
- constexpr void
- test_stride_2d<std::layout_right>()
+ struct TestStride2D<std::layout_right>
{
- std::layout_right::mapping<std::extents<int, 3, 5>> m;
- VERIFY(m.stride(0) == 5);
- VERIFY(m.stride(1) == 1);
- }
+ static constexpr void
+ run()
+ {
+ std::layout_right::mapping<std::extents<int, 3, 5>> m;
+ VERIFY(m.stride(0) == 5);
+ VERIFY(m.stride(1) == 1);
+ }
+ };
template<>
+ struct TestStride2D<std::layout_stride>
+ {
+ static constexpr void
+ run()
+ {
+ std::array<int, 2> strides{13, 2};
+ std::layout_stride::mapping m(std::extents<int, 3, 5>{}, strides);
+ VERIFY(m.stride(0) == strides[0]);
+ VERIFY(m.stride(1) == strides[1]);
+ VERIFY(m.strides() == strides);
+ }
+ };
+
+template<typename Layout>
constexpr void
- test_stride_2d<std::layout_stride>()
+ test_stride_2d()
{
- std::array<int, 2> strides{13, 2};
- std::layout_stride::mapping m(std::extents<int, 3, 5>{}, strides);
- VERIFY(m.stride(0) == strides[0]);
- VERIFY(m.stride(1) == strides[1]);
- VERIFY(m.strides() == strides);
+ TestStride2D<Layout>::run();
}
template<typename Layout>
- constexpr void
- test_stride_3d();
+struct TestStride3D;
template<>
- constexpr void
- test_stride_3d<std::layout_left>()
+ struct TestStride3D<std::layout_left>
{
- std::layout_left::mapping m(std::dextents<int, 3>(3, 5, 7));
- VERIFY(m.stride(0) == 1);
- VERIFY(m.stride(1) == 3);
- VERIFY(m.stride(2) == 3*5);
- }
+ static constexpr void
+ run()
+ {
+ std::layout_left::mapping m(std::dextents<int, 3>(3, 5, 7));
+ VERIFY(m.stride(0) == 1);
+ VERIFY(m.stride(1) == 3);
+ VERIFY(m.stride(2) == 3*5);
+ }
+ };
+
template<>
- constexpr void
- test_stride_3d<std::layout_right>()
+ struct TestStride3D<std::layout_right>
{
- std::layout_right::mapping m(std::dextents<int, 3>(3, 5, 7));
- VERIFY(m.stride(0) == 5*7);
- VERIFY(m.stride(1) == 7);
- VERIFY(m.stride(2) == 1);
- }
+ static constexpr void
+ run()
+ {
+ std::layout_right::mapping m(std::dextents<int, 3>(3, 5, 7));
+ VERIFY(m.stride(0) == 5*7);
+ VERIFY(m.stride(1) == 7);
+ VERIFY(m.stride(2) == 1);
+ }
+ };
template<>
+ struct TestStride3D<std::layout_stride>
+ {
+ static constexpr void
+ run()
+ {
+ std::dextents<int, 3> exts(3, 5, 7);
+ std::array<int, 3> strides{11, 2, 41};
+ std::layout_stride::mapping<std::dextents<int, 3>> m(exts, strides);
+ VERIFY(m.stride(0) == strides[0]);
+ VERIFY(m.stride(1) == strides[1]);
+ VERIFY(m.stride(2) == strides[2]);
+ VERIFY(m.strides() == strides);
+ }
+ };
+
+template<typename Layout>
constexpr void
- test_stride_3d<std::layout_stride>()
+ test_stride_3d()
{
- std::dextents<int, 3> exts(3, 5, 7);
- std::array<int, 3> strides{11, 2, 41};
- std::layout_stride::mapping<std::dextents<int, 3>> m(exts, strides);
- VERIFY(m.stride(0) == strides[0]);
- VERIFY(m.stride(1) == strides[1]);
- VERIFY(m.stride(2) == strides[2]);
- VERIFY(m.strides() == strides);
+ TestStride3D<Layout>::run();
}
template<typename Layout>
--
2.50.1