1*2c6217f2SLouis Dionne //===----------------------------------------------------------------------===//
2*2c6217f2SLouis Dionne //
3*2c6217f2SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2c6217f2SLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
5*2c6217f2SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*2c6217f2SLouis Dionne //
7*2c6217f2SLouis Dionne //===----------------------------------------------------------------------===//
8*2c6217f2SLouis Dionne //
9*2c6217f2SLouis Dionne // WARNING: This test was generated by generate_feature_test_macro_components.py
10*2c6217f2SLouis Dionne // and should not be edited manually.
11*2c6217f2SLouis Dionne //
12*2c6217f2SLouis Dionne // clang-format off
13*2c6217f2SLouis Dionne 
14*2c6217f2SLouis Dionne // <bit>
15*2c6217f2SLouis Dionne 
16*2c6217f2SLouis Dionne // Test the feature test macros defined by <bit>
17*2c6217f2SLouis Dionne 
18*2c6217f2SLouis Dionne /*  Constant              Value
19*2c6217f2SLouis Dionne     __cpp_lib_bit_cast    201806L [C++20]
20*2c6217f2SLouis Dionne     __cpp_lib_bitops      201907L [C++20]
21*2c6217f2SLouis Dionne     __cpp_lib_byteswap    202110L [C++2b]
22*2c6217f2SLouis Dionne     __cpp_lib_endian      201907L [C++20]
23*2c6217f2SLouis Dionne     __cpp_lib_int_pow2    202002L [C++20]
24*2c6217f2SLouis Dionne */
25*2c6217f2SLouis Dionne 
26*2c6217f2SLouis Dionne #include <bit>
27*2c6217f2SLouis Dionne #include "test_macros.h"
28*2c6217f2SLouis Dionne 
29*2c6217f2SLouis Dionne #if TEST_STD_VER < 14
30*2c6217f2SLouis Dionne 
31*2c6217f2SLouis Dionne # ifdef __cpp_lib_bit_cast
32*2c6217f2SLouis Dionne #   error "__cpp_lib_bit_cast should not be defined before c++20"
33*2c6217f2SLouis Dionne # endif
34*2c6217f2SLouis Dionne 
35*2c6217f2SLouis Dionne # ifdef __cpp_lib_bitops
36*2c6217f2SLouis Dionne #   error "__cpp_lib_bitops should not be defined before c++20"
37*2c6217f2SLouis Dionne # endif
38*2c6217f2SLouis Dionne 
39*2c6217f2SLouis Dionne # ifdef __cpp_lib_byteswap
40*2c6217f2SLouis Dionne #   error "__cpp_lib_byteswap should not be defined before c++2b"
41*2c6217f2SLouis Dionne # endif
42*2c6217f2SLouis Dionne 
43*2c6217f2SLouis Dionne # ifdef __cpp_lib_endian
44*2c6217f2SLouis Dionne #   error "__cpp_lib_endian should not be defined before c++20"
45*2c6217f2SLouis Dionne # endif
46*2c6217f2SLouis Dionne 
47*2c6217f2SLouis Dionne # ifdef __cpp_lib_int_pow2
48*2c6217f2SLouis Dionne #   error "__cpp_lib_int_pow2 should not be defined before c++20"
49*2c6217f2SLouis Dionne # endif
50*2c6217f2SLouis Dionne 
51*2c6217f2SLouis Dionne #elif TEST_STD_VER == 14
52*2c6217f2SLouis Dionne 
53*2c6217f2SLouis Dionne # ifdef __cpp_lib_bit_cast
54*2c6217f2SLouis Dionne #   error "__cpp_lib_bit_cast should not be defined before c++20"
55*2c6217f2SLouis Dionne # endif
56*2c6217f2SLouis Dionne 
57*2c6217f2SLouis Dionne # ifdef __cpp_lib_bitops
58*2c6217f2SLouis Dionne #   error "__cpp_lib_bitops should not be defined before c++20"
59*2c6217f2SLouis Dionne # endif
60*2c6217f2SLouis Dionne 
61*2c6217f2SLouis Dionne # ifdef __cpp_lib_byteswap
62*2c6217f2SLouis Dionne #   error "__cpp_lib_byteswap should not be defined before c++2b"
63*2c6217f2SLouis Dionne # endif
64*2c6217f2SLouis Dionne 
65*2c6217f2SLouis Dionne # ifdef __cpp_lib_endian
66*2c6217f2SLouis Dionne #   error "__cpp_lib_endian should not be defined before c++20"
67*2c6217f2SLouis Dionne # endif
68*2c6217f2SLouis Dionne 
69*2c6217f2SLouis Dionne # ifdef __cpp_lib_int_pow2
70*2c6217f2SLouis Dionne #   error "__cpp_lib_int_pow2 should not be defined before c++20"
71*2c6217f2SLouis Dionne # endif
72*2c6217f2SLouis Dionne 
73*2c6217f2SLouis Dionne #elif TEST_STD_VER == 17
74*2c6217f2SLouis Dionne 
75*2c6217f2SLouis Dionne # ifdef __cpp_lib_bit_cast
76*2c6217f2SLouis Dionne #   error "__cpp_lib_bit_cast should not be defined before c++20"
77*2c6217f2SLouis Dionne # endif
78*2c6217f2SLouis Dionne 
79*2c6217f2SLouis Dionne # ifdef __cpp_lib_bitops
80*2c6217f2SLouis Dionne #   error "__cpp_lib_bitops should not be defined before c++20"
81*2c6217f2SLouis Dionne # endif
82*2c6217f2SLouis Dionne 
83*2c6217f2SLouis Dionne # ifdef __cpp_lib_byteswap
84*2c6217f2SLouis Dionne #   error "__cpp_lib_byteswap should not be defined before c++2b"
85*2c6217f2SLouis Dionne # endif
86*2c6217f2SLouis Dionne 
87*2c6217f2SLouis Dionne # ifdef __cpp_lib_endian
88*2c6217f2SLouis Dionne #   error "__cpp_lib_endian should not be defined before c++20"
89*2c6217f2SLouis Dionne # endif
90*2c6217f2SLouis Dionne 
91*2c6217f2SLouis Dionne # ifdef __cpp_lib_int_pow2
92*2c6217f2SLouis Dionne #   error "__cpp_lib_int_pow2 should not be defined before c++20"
93*2c6217f2SLouis Dionne # endif
94*2c6217f2SLouis Dionne 
95*2c6217f2SLouis Dionne #elif TEST_STD_VER == 20
96*2c6217f2SLouis Dionne 
97*2c6217f2SLouis Dionne # ifndef __cpp_lib_bit_cast
98*2c6217f2SLouis Dionne #   error "__cpp_lib_bit_cast should be defined in c++20"
99*2c6217f2SLouis Dionne # endif
100*2c6217f2SLouis Dionne # if __cpp_lib_bit_cast != 201806L
101*2c6217f2SLouis Dionne #   error "__cpp_lib_bit_cast should have the value 201806L in c++20"
102*2c6217f2SLouis Dionne # endif
103*2c6217f2SLouis Dionne 
104*2c6217f2SLouis Dionne # if !defined(_LIBCPP_VERSION)
105*2c6217f2SLouis Dionne #   ifndef __cpp_lib_bitops
106*2c6217f2SLouis Dionne #     error "__cpp_lib_bitops should be defined in c++20"
107*2c6217f2SLouis Dionne #   endif
108*2c6217f2SLouis Dionne #   if __cpp_lib_bitops != 201907L
109*2c6217f2SLouis Dionne #     error "__cpp_lib_bitops should have the value 201907L in c++20"
110*2c6217f2SLouis Dionne #   endif
111*2c6217f2SLouis Dionne # else // _LIBCPP_VERSION
112*2c6217f2SLouis Dionne #   ifdef __cpp_lib_bitops
113*2c6217f2SLouis Dionne #     error "__cpp_lib_bitops should not be defined because it is unimplemented in libc++!"
114*2c6217f2SLouis Dionne #   endif
115*2c6217f2SLouis Dionne # endif
116*2c6217f2SLouis Dionne 
117*2c6217f2SLouis Dionne # ifdef __cpp_lib_byteswap
118*2c6217f2SLouis Dionne #   error "__cpp_lib_byteswap should not be defined before c++2b"
119*2c6217f2SLouis Dionne # endif
120*2c6217f2SLouis Dionne 
121*2c6217f2SLouis Dionne # ifndef __cpp_lib_endian
122*2c6217f2SLouis Dionne #   error "__cpp_lib_endian should be defined in c++20"
123*2c6217f2SLouis Dionne # endif
124*2c6217f2SLouis Dionne # if __cpp_lib_endian != 201907L
125*2c6217f2SLouis Dionne #   error "__cpp_lib_endian should have the value 201907L in c++20"
126*2c6217f2SLouis Dionne # endif
127*2c6217f2SLouis Dionne 
128*2c6217f2SLouis Dionne # ifndef __cpp_lib_int_pow2
129*2c6217f2SLouis Dionne #   error "__cpp_lib_int_pow2 should be defined in c++20"
130*2c6217f2SLouis Dionne # endif
131*2c6217f2SLouis Dionne # if __cpp_lib_int_pow2 != 202002L
132*2c6217f2SLouis Dionne #   error "__cpp_lib_int_pow2 should have the value 202002L in c++20"
133*2c6217f2SLouis Dionne # endif
134*2c6217f2SLouis Dionne 
135*2c6217f2SLouis Dionne #elif TEST_STD_VER > 20
136*2c6217f2SLouis Dionne 
137*2c6217f2SLouis Dionne # ifndef __cpp_lib_bit_cast
138*2c6217f2SLouis Dionne #   error "__cpp_lib_bit_cast should be defined in c++2b"
139*2c6217f2SLouis Dionne # endif
140*2c6217f2SLouis Dionne # if __cpp_lib_bit_cast != 201806L
141*2c6217f2SLouis Dionne #   error "__cpp_lib_bit_cast should have the value 201806L in c++2b"
142*2c6217f2SLouis Dionne # endif
143*2c6217f2SLouis Dionne 
144*2c6217f2SLouis Dionne # if !defined(_LIBCPP_VERSION)
145*2c6217f2SLouis Dionne #   ifndef __cpp_lib_bitops
146*2c6217f2SLouis Dionne #     error "__cpp_lib_bitops should be defined in c++2b"
147*2c6217f2SLouis Dionne #   endif
148*2c6217f2SLouis Dionne #   if __cpp_lib_bitops != 201907L
149*2c6217f2SLouis Dionne #     error "__cpp_lib_bitops should have the value 201907L in c++2b"
150*2c6217f2SLouis Dionne #   endif
151*2c6217f2SLouis Dionne # else // _LIBCPP_VERSION
152*2c6217f2SLouis Dionne #   ifdef __cpp_lib_bitops
153*2c6217f2SLouis Dionne #     error "__cpp_lib_bitops should not be defined because it is unimplemented in libc++!"
154*2c6217f2SLouis Dionne #   endif
155*2c6217f2SLouis Dionne # endif
156*2c6217f2SLouis Dionne 
157*2c6217f2SLouis Dionne # ifndef __cpp_lib_byteswap
158*2c6217f2SLouis Dionne #   error "__cpp_lib_byteswap should be defined in c++2b"
159*2c6217f2SLouis Dionne # endif
160*2c6217f2SLouis Dionne # if __cpp_lib_byteswap != 202110L
161*2c6217f2SLouis Dionne #   error "__cpp_lib_byteswap should have the value 202110L in c++2b"
162*2c6217f2SLouis Dionne # endif
163*2c6217f2SLouis Dionne 
164*2c6217f2SLouis Dionne # ifndef __cpp_lib_endian
165*2c6217f2SLouis Dionne #   error "__cpp_lib_endian should be defined in c++2b"
166*2c6217f2SLouis Dionne # endif
167*2c6217f2SLouis Dionne # if __cpp_lib_endian != 201907L
168*2c6217f2SLouis Dionne #   error "__cpp_lib_endian should have the value 201907L in c++2b"
169*2c6217f2SLouis Dionne # endif
170*2c6217f2SLouis Dionne 
171*2c6217f2SLouis Dionne # ifndef __cpp_lib_int_pow2
172*2c6217f2SLouis Dionne #   error "__cpp_lib_int_pow2 should be defined in c++2b"
173*2c6217f2SLouis Dionne # endif
174*2c6217f2SLouis Dionne # if __cpp_lib_int_pow2 != 202002L
175*2c6217f2SLouis Dionne #   error "__cpp_lib_int_pow2 should have the value 202002L in c++2b"
176*2c6217f2SLouis Dionne # endif
177*2c6217f2SLouis Dionne 
178*2c6217f2SLouis Dionne #endif // TEST_STD_VER > 20
179*2c6217f2SLouis Dionne 
180