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 <luc.groshei...@gmail.com> --- .../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