12c6217f2SLouis Dionne //===----------------------------------------------------------------------===//
22c6217f2SLouis Dionne //
32c6217f2SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42c6217f2SLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
52c6217f2SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
62c6217f2SLouis Dionne //
72c6217f2SLouis Dionne //===----------------------------------------------------------------------===//
82c6217f2SLouis Dionne //
92c6217f2SLouis Dionne // WARNING: This test was generated by generate_feature_test_macro_components.py
102c6217f2SLouis Dionne // and should not be edited manually.
112c6217f2SLouis Dionne //
122c6217f2SLouis Dionne // clang-format off
132c6217f2SLouis Dionne 
142c6217f2SLouis Dionne // <execution>
152c6217f2SLouis Dionne 
162c6217f2SLouis Dionne // Test the feature test macros defined by <execution>
172c6217f2SLouis Dionne 
182c6217f2SLouis Dionne /*  Constant               Value
192c6217f2SLouis Dionne     __cpp_lib_execution    201603L [C++17]
202c6217f2SLouis Dionne                            201902L [C++20]
21*2dadf8d7SMark de Wever     __cpp_lib_senders      202406L [C++26]
222c6217f2SLouis Dionne */
232c6217f2SLouis Dionne 
242c6217f2SLouis Dionne #include <execution>
252c6217f2SLouis Dionne #include "test_macros.h"
262c6217f2SLouis Dionne 
272c6217f2SLouis Dionne #if TEST_STD_VER < 14
282c6217f2SLouis Dionne 
292c6217f2SLouis Dionne # ifdef __cpp_lib_execution
302c6217f2SLouis Dionne #   error "__cpp_lib_execution should not be defined before c++17"
312c6217f2SLouis Dionne # endif
322c6217f2SLouis Dionne 
33*2dadf8d7SMark de Wever # ifdef __cpp_lib_senders
34*2dadf8d7SMark de Wever #   error "__cpp_lib_senders should not be defined before c++26"
35*2dadf8d7SMark de Wever # endif
36*2dadf8d7SMark de Wever 
372c6217f2SLouis Dionne #elif TEST_STD_VER == 14
382c6217f2SLouis Dionne 
392c6217f2SLouis Dionne # ifdef __cpp_lib_execution
402c6217f2SLouis Dionne #   error "__cpp_lib_execution should not be defined before c++17"
412c6217f2SLouis Dionne # endif
422c6217f2SLouis Dionne 
43*2dadf8d7SMark de Wever # ifdef __cpp_lib_senders
44*2dadf8d7SMark de Wever #   error "__cpp_lib_senders should not be defined before c++26"
45*2dadf8d7SMark de Wever # endif
46*2dadf8d7SMark de Wever 
472c6217f2SLouis Dionne #elif TEST_STD_VER == 17
482c6217f2SLouis Dionne 
492c6217f2SLouis Dionne # if !defined(_LIBCPP_VERSION)
502c6217f2SLouis Dionne #   ifndef __cpp_lib_execution
512c6217f2SLouis Dionne #     error "__cpp_lib_execution should be defined in c++17"
522c6217f2SLouis Dionne #   endif
532c6217f2SLouis Dionne #   if __cpp_lib_execution != 201603L
542c6217f2SLouis Dionne #     error "__cpp_lib_execution should have the value 201603L in c++17"
552c6217f2SLouis Dionne #   endif
562c6217f2SLouis Dionne # else // _LIBCPP_VERSION
572c6217f2SLouis Dionne #   ifdef __cpp_lib_execution
582c6217f2SLouis Dionne #     error "__cpp_lib_execution should not be defined because it is unimplemented in libc++!"
592c6217f2SLouis Dionne #   endif
602c6217f2SLouis Dionne # endif
612c6217f2SLouis Dionne 
62*2dadf8d7SMark de Wever # ifdef __cpp_lib_senders
63*2dadf8d7SMark de Wever #   error "__cpp_lib_senders should not be defined before c++26"
64*2dadf8d7SMark de Wever # endif
65*2dadf8d7SMark de Wever 
662c6217f2SLouis Dionne #elif TEST_STD_VER == 20
672c6217f2SLouis Dionne 
682c6217f2SLouis Dionne # if !defined(_LIBCPP_VERSION)
692c6217f2SLouis Dionne #   ifndef __cpp_lib_execution
702c6217f2SLouis Dionne #     error "__cpp_lib_execution should be defined in c++20"
712c6217f2SLouis Dionne #   endif
722c6217f2SLouis Dionne #   if __cpp_lib_execution != 201902L
732c6217f2SLouis Dionne #     error "__cpp_lib_execution should have the value 201902L in c++20"
742c6217f2SLouis Dionne #   endif
752c6217f2SLouis Dionne # else // _LIBCPP_VERSION
762c6217f2SLouis Dionne #   ifdef __cpp_lib_execution
772c6217f2SLouis Dionne #     error "__cpp_lib_execution should not be defined because it is unimplemented in libc++!"
782c6217f2SLouis Dionne #   endif
792c6217f2SLouis Dionne # endif
802c6217f2SLouis Dionne 
81*2dadf8d7SMark de Wever # ifdef __cpp_lib_senders
82*2dadf8d7SMark de Wever #   error "__cpp_lib_senders should not be defined before c++26"
83*2dadf8d7SMark de Wever # endif
84*2dadf8d7SMark de Wever 
8500c97cbcSMark de Wever #elif TEST_STD_VER == 23
862c6217f2SLouis Dionne 
872c6217f2SLouis Dionne # if !defined(_LIBCPP_VERSION)
882c6217f2SLouis Dionne #   ifndef __cpp_lib_execution
8971400505SMark de Wever #     error "__cpp_lib_execution should be defined in c++23"
902c6217f2SLouis Dionne #   endif
912c6217f2SLouis Dionne #   if __cpp_lib_execution != 201902L
9271400505SMark de Wever #     error "__cpp_lib_execution should have the value 201902L in c++23"
932c6217f2SLouis Dionne #   endif
942c6217f2SLouis Dionne # else // _LIBCPP_VERSION
952c6217f2SLouis Dionne #   ifdef __cpp_lib_execution
962c6217f2SLouis Dionne #     error "__cpp_lib_execution should not be defined because it is unimplemented in libc++!"
972c6217f2SLouis Dionne #   endif
982c6217f2SLouis Dionne # endif
992c6217f2SLouis Dionne 
100*2dadf8d7SMark de Wever # ifdef __cpp_lib_senders
101*2dadf8d7SMark de Wever #   error "__cpp_lib_senders should not be defined before c++26"
102*2dadf8d7SMark de Wever # endif
103*2dadf8d7SMark de Wever 
10400c97cbcSMark de Wever #elif TEST_STD_VER > 23
10500c97cbcSMark de Wever 
10600c97cbcSMark de Wever # if !defined(_LIBCPP_VERSION)
10700c97cbcSMark de Wever #   ifndef __cpp_lib_execution
10800c97cbcSMark de Wever #     error "__cpp_lib_execution should be defined in c++26"
10900c97cbcSMark de Wever #   endif
11000c97cbcSMark de Wever #   if __cpp_lib_execution != 201902L
11100c97cbcSMark de Wever #     error "__cpp_lib_execution should have the value 201902L in c++26"
11200c97cbcSMark de Wever #   endif
11300c97cbcSMark de Wever # else // _LIBCPP_VERSION
11400c97cbcSMark de Wever #   ifdef __cpp_lib_execution
11500c97cbcSMark de Wever #     error "__cpp_lib_execution should not be defined because it is unimplemented in libc++!"
11600c97cbcSMark de Wever #   endif
11700c97cbcSMark de Wever # endif
11800c97cbcSMark de Wever 
119*2dadf8d7SMark de Wever # if !defined(_LIBCPP_VERSION)
120*2dadf8d7SMark de Wever #   ifndef __cpp_lib_senders
121*2dadf8d7SMark de Wever #     error "__cpp_lib_senders should be defined in c++26"
122*2dadf8d7SMark de Wever #   endif
123*2dadf8d7SMark de Wever #   if __cpp_lib_senders != 202406L
124*2dadf8d7SMark de Wever #     error "__cpp_lib_senders should have the value 202406L in c++26"
125*2dadf8d7SMark de Wever #   endif
126*2dadf8d7SMark de Wever # else // _LIBCPP_VERSION
127*2dadf8d7SMark de Wever #   ifdef __cpp_lib_senders
128*2dadf8d7SMark de Wever #     error "__cpp_lib_senders should not be defined because it is unimplemented in libc++!"
129*2dadf8d7SMark de Wever #   endif
130*2dadf8d7SMark de Wever # endif
131*2dadf8d7SMark de Wever 
13200c97cbcSMark de Wever #endif // TEST_STD_VER > 23
1332c6217f2SLouis Dionne 
134