1fcaccf81SChristian Trott //===----------------------------------------------------------------------===//
2fcaccf81SChristian Trott //
3fcaccf81SChristian Trott // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4fcaccf81SChristian Trott // See https://llvm.org/LICENSE.txt for license information.
5fcaccf81SChristian Trott // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6fcaccf81SChristian Trott //
7fcaccf81SChristian Trott //===----------------------------------------------------------------------===//
8fcaccf81SChristian Trott //
9fcaccf81SChristian Trott // WARNING: This test was generated by generate_feature_test_macro_components.py
10fcaccf81SChristian Trott // and should not be edited manually.
11fcaccf81SChristian Trott //
12fcaccf81SChristian Trott // clang-format off
13fcaccf81SChristian Trott 
14fcaccf81SChristian Trott // <mdspan>
15fcaccf81SChristian Trott 
16fcaccf81SChristian Trott // Test the feature test macros defined by <mdspan>
17fcaccf81SChristian Trott 
18fcaccf81SChristian Trott /*  Constant                         Value
19f49ccca8SMark de Wever     __cpp_lib_freestanding_mdspan    202311L [C++26]
2071400505SMark de Wever     __cpp_lib_mdspan                 202207L [C++23]
21*4e338dceSXiaoyang Liu                                      202406L [C++26]
223f05d044SMark de Wever     __cpp_lib_submdspan              202306L [C++26]
23fcaccf81SChristian Trott */
24fcaccf81SChristian Trott 
25fcaccf81SChristian Trott #include <mdspan>
26fcaccf81SChristian Trott #include "test_macros.h"
27fcaccf81SChristian Trott 
28fcaccf81SChristian Trott #if TEST_STD_VER < 14
29fcaccf81SChristian Trott 
30f49ccca8SMark de Wever # ifdef __cpp_lib_freestanding_mdspan
31f49ccca8SMark de Wever #   error "__cpp_lib_freestanding_mdspan should not be defined before c++26"
32f49ccca8SMark de Wever # endif
33f49ccca8SMark de Wever 
34fcaccf81SChristian Trott # ifdef __cpp_lib_mdspan
3571400505SMark de Wever #   error "__cpp_lib_mdspan should not be defined before c++23"
36fcaccf81SChristian Trott # endif
37fcaccf81SChristian Trott 
383f05d044SMark de Wever # ifdef __cpp_lib_submdspan
393f05d044SMark de Wever #   error "__cpp_lib_submdspan should not be defined before c++26"
403f05d044SMark de Wever # endif
413f05d044SMark de Wever 
42fcaccf81SChristian Trott #elif TEST_STD_VER == 14
43fcaccf81SChristian Trott 
44f49ccca8SMark de Wever # ifdef __cpp_lib_freestanding_mdspan
45f49ccca8SMark de Wever #   error "__cpp_lib_freestanding_mdspan should not be defined before c++26"
46f49ccca8SMark de Wever # endif
47f49ccca8SMark de Wever 
48fcaccf81SChristian Trott # ifdef __cpp_lib_mdspan
4971400505SMark de Wever #   error "__cpp_lib_mdspan should not be defined before c++23"
50fcaccf81SChristian Trott # endif
51fcaccf81SChristian Trott 
523f05d044SMark de Wever # ifdef __cpp_lib_submdspan
533f05d044SMark de Wever #   error "__cpp_lib_submdspan should not be defined before c++26"
543f05d044SMark de Wever # endif
553f05d044SMark de Wever 
56fcaccf81SChristian Trott #elif TEST_STD_VER == 17
57fcaccf81SChristian Trott 
58f49ccca8SMark de Wever # ifdef __cpp_lib_freestanding_mdspan
59f49ccca8SMark de Wever #   error "__cpp_lib_freestanding_mdspan should not be defined before c++26"
60f49ccca8SMark de Wever # endif
61f49ccca8SMark de Wever 
62fcaccf81SChristian Trott # ifdef __cpp_lib_mdspan
6371400505SMark de Wever #   error "__cpp_lib_mdspan should not be defined before c++23"
64fcaccf81SChristian Trott # endif
65fcaccf81SChristian Trott 
663f05d044SMark de Wever # ifdef __cpp_lib_submdspan
673f05d044SMark de Wever #   error "__cpp_lib_submdspan should not be defined before c++26"
683f05d044SMark de Wever # endif
693f05d044SMark de Wever 
70fcaccf81SChristian Trott #elif TEST_STD_VER == 20
71fcaccf81SChristian Trott 
72f49ccca8SMark de Wever # ifdef __cpp_lib_freestanding_mdspan
73f49ccca8SMark de Wever #   error "__cpp_lib_freestanding_mdspan should not be defined before c++26"
74f49ccca8SMark de Wever # endif
75f49ccca8SMark de Wever 
76fcaccf81SChristian Trott # ifdef __cpp_lib_mdspan
7771400505SMark de Wever #   error "__cpp_lib_mdspan should not be defined before c++23"
78fcaccf81SChristian Trott # endif
79fcaccf81SChristian Trott 
803f05d044SMark de Wever # ifdef __cpp_lib_submdspan
813f05d044SMark de Wever #   error "__cpp_lib_submdspan should not be defined before c++26"
823f05d044SMark de Wever # endif
833f05d044SMark de Wever 
8400c97cbcSMark de Wever #elif TEST_STD_VER == 23
85fcaccf81SChristian Trott 
86f49ccca8SMark de Wever # ifdef __cpp_lib_freestanding_mdspan
87f49ccca8SMark de Wever #   error "__cpp_lib_freestanding_mdspan should not be defined before c++26"
88f49ccca8SMark de Wever # endif
89f49ccca8SMark de Wever 
90fcaccf81SChristian Trott # ifndef __cpp_lib_mdspan
9171400505SMark de Wever #   error "__cpp_lib_mdspan should be defined in c++23"
92fcaccf81SChristian Trott # endif
93fcaccf81SChristian Trott # if __cpp_lib_mdspan != 202207L
9471400505SMark de Wever #   error "__cpp_lib_mdspan should have the value 202207L in c++23"
95fcaccf81SChristian Trott # endif
96fcaccf81SChristian Trott 
973f05d044SMark de Wever # ifdef __cpp_lib_submdspan
983f05d044SMark de Wever #   error "__cpp_lib_submdspan should not be defined before c++26"
993f05d044SMark de Wever # endif
1003f05d044SMark de Wever 
10100c97cbcSMark de Wever #elif TEST_STD_VER > 23
10200c97cbcSMark de Wever 
103f49ccca8SMark de Wever # if !defined(_LIBCPP_VERSION)
104f49ccca8SMark de Wever #   ifndef __cpp_lib_freestanding_mdspan
105f49ccca8SMark de Wever #     error "__cpp_lib_freestanding_mdspan should be defined in c++26"
106f49ccca8SMark de Wever #   endif
107f49ccca8SMark de Wever #   if __cpp_lib_freestanding_mdspan != 202311L
108f49ccca8SMark de Wever #     error "__cpp_lib_freestanding_mdspan should have the value 202311L in c++26"
109f49ccca8SMark de Wever #   endif
110f49ccca8SMark de Wever # else // _LIBCPP_VERSION
111f49ccca8SMark de Wever #   ifdef __cpp_lib_freestanding_mdspan
112f49ccca8SMark de Wever #     error "__cpp_lib_freestanding_mdspan should not be defined because it is unimplemented in libc++!"
113f49ccca8SMark de Wever #   endif
114f49ccca8SMark de Wever # endif
115f49ccca8SMark de Wever 
11600c97cbcSMark de Wever # ifndef __cpp_lib_mdspan
11700c97cbcSMark de Wever #   error "__cpp_lib_mdspan should be defined in c++26"
11800c97cbcSMark de Wever # endif
119*4e338dceSXiaoyang Liu # if __cpp_lib_mdspan != 202406L
120*4e338dceSXiaoyang Liu #   error "__cpp_lib_mdspan should have the value 202406L in c++26"
12100c97cbcSMark de Wever # endif
12200c97cbcSMark de Wever 
1233f05d044SMark de Wever # if !defined(_LIBCPP_VERSION)
1243f05d044SMark de Wever #   ifndef __cpp_lib_submdspan
1253f05d044SMark de Wever #     error "__cpp_lib_submdspan should be defined in c++26"
1263f05d044SMark de Wever #   endif
1273f05d044SMark de Wever #   if __cpp_lib_submdspan != 202306L
1283f05d044SMark de Wever #     error "__cpp_lib_submdspan should have the value 202306L in c++26"
1293f05d044SMark de Wever #   endif
1303f05d044SMark de Wever # else // _LIBCPP_VERSION
1313f05d044SMark de Wever #   ifdef __cpp_lib_submdspan
1323f05d044SMark de Wever #     error "__cpp_lib_submdspan should not be defined because it is unimplemented in libc++!"
1333f05d044SMark de Wever #   endif
1343f05d044SMark de Wever # endif
1353f05d044SMark de Wever 
13600c97cbcSMark de Wever #endif // TEST_STD_VER > 23
137fcaccf81SChristian Trott 
138