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 // <variant>
152c6217f2SLouis Dionne 
162c6217f2SLouis Dionne // Test the feature test macros defined by <variant>
172c6217f2SLouis Dionne 
182c6217f2SLouis Dionne /*  Constant                          Value
19b699a9baSLouis Dionne     __cpp_lib_constrained_equality    202403L [C++26]
20f49ccca8SMark de Wever     __cpp_lib_freestanding_variant    202311L [C++26]
212c6217f2SLouis Dionne     __cpp_lib_variant                 202102L [C++17]
22*cae351f3SA. Jiang                                       202106L [C++20]
23*cae351f3SA. Jiang                                       202306L [C++26]
242c6217f2SLouis Dionne */
252c6217f2SLouis Dionne 
262c6217f2SLouis Dionne #include <variant>
272c6217f2SLouis Dionne #include "test_macros.h"
282c6217f2SLouis Dionne 
292c6217f2SLouis Dionne #if TEST_STD_VER < 14
302c6217f2SLouis Dionne 
31b699a9baSLouis Dionne # ifdef __cpp_lib_constrained_equality
32b699a9baSLouis Dionne #   error "__cpp_lib_constrained_equality should not be defined before c++26"
33b699a9baSLouis Dionne # endif
34b699a9baSLouis Dionne 
35f49ccca8SMark de Wever # ifdef __cpp_lib_freestanding_variant
36f49ccca8SMark de Wever #   error "__cpp_lib_freestanding_variant should not be defined before c++26"
37f49ccca8SMark de Wever # endif
38f49ccca8SMark de Wever 
392c6217f2SLouis Dionne # ifdef __cpp_lib_variant
402c6217f2SLouis Dionne #   error "__cpp_lib_variant should not be defined before c++17"
412c6217f2SLouis Dionne # endif
422c6217f2SLouis Dionne 
432c6217f2SLouis Dionne #elif TEST_STD_VER == 14
442c6217f2SLouis Dionne 
45b699a9baSLouis Dionne # ifdef __cpp_lib_constrained_equality
46b699a9baSLouis Dionne #   error "__cpp_lib_constrained_equality should not be defined before c++26"
47b699a9baSLouis Dionne # endif
48b699a9baSLouis Dionne 
49f49ccca8SMark de Wever # ifdef __cpp_lib_freestanding_variant
50f49ccca8SMark de Wever #   error "__cpp_lib_freestanding_variant should not be defined before c++26"
51f49ccca8SMark de Wever # endif
52f49ccca8SMark de Wever 
532c6217f2SLouis Dionne # ifdef __cpp_lib_variant
542c6217f2SLouis Dionne #   error "__cpp_lib_variant should not be defined before c++17"
552c6217f2SLouis Dionne # endif
562c6217f2SLouis Dionne 
572c6217f2SLouis Dionne #elif TEST_STD_VER == 17
582c6217f2SLouis Dionne 
59b699a9baSLouis Dionne # ifdef __cpp_lib_constrained_equality
60b699a9baSLouis Dionne #   error "__cpp_lib_constrained_equality should not be defined before c++26"
61b699a9baSLouis Dionne # endif
62b699a9baSLouis Dionne 
63f49ccca8SMark de Wever # ifdef __cpp_lib_freestanding_variant
64f49ccca8SMark de Wever #   error "__cpp_lib_freestanding_variant should not be defined before c++26"
65f49ccca8SMark de Wever # endif
66f49ccca8SMark de Wever 
672c6217f2SLouis Dionne # ifndef __cpp_lib_variant
682c6217f2SLouis Dionne #   error "__cpp_lib_variant should be defined in c++17"
692c6217f2SLouis Dionne # endif
702c6217f2SLouis Dionne # if __cpp_lib_variant != 202102L
712c6217f2SLouis Dionne #   error "__cpp_lib_variant should have the value 202102L in c++17"
722c6217f2SLouis Dionne # endif
732c6217f2SLouis Dionne 
742c6217f2SLouis Dionne #elif TEST_STD_VER == 20
752c6217f2SLouis Dionne 
76b699a9baSLouis Dionne # ifdef __cpp_lib_constrained_equality
77b699a9baSLouis Dionne #   error "__cpp_lib_constrained_equality should not be defined before c++26"
78b699a9baSLouis Dionne # endif
79b699a9baSLouis Dionne 
80f49ccca8SMark de Wever # ifdef __cpp_lib_freestanding_variant
81f49ccca8SMark de Wever #   error "__cpp_lib_freestanding_variant should not be defined before c++26"
82f49ccca8SMark de Wever # endif
83f49ccca8SMark de Wever 
842c6217f2SLouis Dionne # ifndef __cpp_lib_variant
852c6217f2SLouis Dionne #   error "__cpp_lib_variant should be defined in c++20"
862c6217f2SLouis Dionne # endif
87*cae351f3SA. Jiang # if __cpp_lib_variant != 202106L
88*cae351f3SA. Jiang #   error "__cpp_lib_variant should have the value 202106L in c++20"
892c6217f2SLouis Dionne # endif
902c6217f2SLouis Dionne 
9100c97cbcSMark de Wever #elif TEST_STD_VER == 23
922c6217f2SLouis Dionne 
93b699a9baSLouis Dionne # ifdef __cpp_lib_constrained_equality
94b699a9baSLouis Dionne #   error "__cpp_lib_constrained_equality should not be defined before c++26"
95b699a9baSLouis Dionne # endif
96b699a9baSLouis Dionne 
97f49ccca8SMark de Wever # ifdef __cpp_lib_freestanding_variant
98f49ccca8SMark de Wever #   error "__cpp_lib_freestanding_variant should not be defined before c++26"
99f49ccca8SMark de Wever # endif
100f49ccca8SMark de Wever 
1012c6217f2SLouis Dionne # ifndef __cpp_lib_variant
10271400505SMark de Wever #   error "__cpp_lib_variant should be defined in c++23"
1032c6217f2SLouis Dionne # endif
104*cae351f3SA. Jiang # if __cpp_lib_variant != 202106L
105*cae351f3SA. Jiang #   error "__cpp_lib_variant should have the value 202106L in c++23"
1062c6217f2SLouis Dionne # endif
1072c6217f2SLouis Dionne 
10800c97cbcSMark de Wever #elif TEST_STD_VER > 23
10900c97cbcSMark de Wever 
110f49ccca8SMark de Wever # if !defined(_LIBCPP_VERSION)
111b699a9baSLouis Dionne #   ifndef __cpp_lib_constrained_equality
112b699a9baSLouis Dionne #     error "__cpp_lib_constrained_equality should be defined in c++26"
113b699a9baSLouis Dionne #   endif
114b699a9baSLouis Dionne #   if __cpp_lib_constrained_equality != 202403L
115b699a9baSLouis Dionne #     error "__cpp_lib_constrained_equality should have the value 202403L in c++26"
116b699a9baSLouis Dionne #   endif
117b699a9baSLouis Dionne # else // _LIBCPP_VERSION
118b699a9baSLouis Dionne #   ifdef __cpp_lib_constrained_equality
119b699a9baSLouis Dionne #     error "__cpp_lib_constrained_equality should not be defined because it is unimplemented in libc++!"
120b699a9baSLouis Dionne #   endif
121b699a9baSLouis Dionne # endif
122b699a9baSLouis Dionne 
123b699a9baSLouis Dionne # if !defined(_LIBCPP_VERSION)
124f49ccca8SMark de Wever #   ifndef __cpp_lib_freestanding_variant
125f49ccca8SMark de Wever #     error "__cpp_lib_freestanding_variant should be defined in c++26"
126f49ccca8SMark de Wever #   endif
127f49ccca8SMark de Wever #   if __cpp_lib_freestanding_variant != 202311L
128f49ccca8SMark de Wever #     error "__cpp_lib_freestanding_variant should have the value 202311L in c++26"
129f49ccca8SMark de Wever #   endif
130f49ccca8SMark de Wever # else // _LIBCPP_VERSION
131f49ccca8SMark de Wever #   ifdef __cpp_lib_freestanding_variant
132f49ccca8SMark de Wever #     error "__cpp_lib_freestanding_variant should not be defined because it is unimplemented in libc++!"
133f49ccca8SMark de Wever #   endif
134f49ccca8SMark de Wever # endif
135f49ccca8SMark de Wever 
13600c97cbcSMark de Wever # ifndef __cpp_lib_variant
13700c97cbcSMark de Wever #   error "__cpp_lib_variant should be defined in c++26"
13800c97cbcSMark de Wever # endif
139*cae351f3SA. Jiang # if __cpp_lib_variant != 202306L
140*cae351f3SA. Jiang #   error "__cpp_lib_variant should have the value 202306L in c++26"
14100c97cbcSMark de Wever # endif
14200c97cbcSMark de Wever 
14300c97cbcSMark de Wever #endif // TEST_STD_VER > 23
1442c6217f2SLouis Dionne 
145