1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // WARNING: This test was generated by generate_feature_test_macro_components.py 10 // and should not be edited manually. 11 // 12 // clang-format off 13 14 // <atomic> 15 16 // Test the feature test macros defined by <atomic> 17 18 /* Constant Value 19 __cpp_lib_atomic_flag_test 201907L [C++20] 20 __cpp_lib_atomic_float 201711L [C++20] 21 __cpp_lib_atomic_is_always_lock_free 201603L [C++17] 22 __cpp_lib_atomic_lock_free_type_aliases 201907L [C++20] 23 __cpp_lib_atomic_min_max 202403L [C++26] 24 __cpp_lib_atomic_ref 201806L [C++20] 25 __cpp_lib_atomic_shared_ptr 201711L [C++20] 26 __cpp_lib_atomic_value_initialization 201911L [C++20] 27 __cpp_lib_atomic_wait 201907L [C++20] 28 __cpp_lib_char8_t 201907L [C++20] 29 */ 30 31 #include <atomic> 32 #include "test_macros.h" 33 34 #if TEST_STD_VER < 14 35 36 # ifdef __cpp_lib_atomic_flag_test 37 # error "__cpp_lib_atomic_flag_test should not be defined before c++20" 38 # endif 39 40 # ifdef __cpp_lib_atomic_float 41 # error "__cpp_lib_atomic_float should not be defined before c++20" 42 # endif 43 44 # ifdef __cpp_lib_atomic_is_always_lock_free 45 # error "__cpp_lib_atomic_is_always_lock_free should not be defined before c++17" 46 # endif 47 48 # ifdef __cpp_lib_atomic_lock_free_type_aliases 49 # error "__cpp_lib_atomic_lock_free_type_aliases should not be defined before c++20" 50 # endif 51 52 # ifdef __cpp_lib_atomic_min_max 53 # error "__cpp_lib_atomic_min_max should not be defined before c++26" 54 # endif 55 56 # ifdef __cpp_lib_atomic_ref 57 # error "__cpp_lib_atomic_ref should not be defined before c++20" 58 # endif 59 60 # ifdef __cpp_lib_atomic_shared_ptr 61 # error "__cpp_lib_atomic_shared_ptr should not be defined before c++20" 62 # endif 63 64 # ifdef __cpp_lib_atomic_value_initialization 65 # error "__cpp_lib_atomic_value_initialization should not be defined before c++20" 66 # endif 67 68 # ifdef __cpp_lib_atomic_wait 69 # error "__cpp_lib_atomic_wait should not be defined before c++20" 70 # endif 71 72 # ifdef __cpp_lib_char8_t 73 # error "__cpp_lib_char8_t should not be defined before c++20" 74 # endif 75 76 #elif TEST_STD_VER == 14 77 78 # ifdef __cpp_lib_atomic_flag_test 79 # error "__cpp_lib_atomic_flag_test should not be defined before c++20" 80 # endif 81 82 # ifdef __cpp_lib_atomic_float 83 # error "__cpp_lib_atomic_float should not be defined before c++20" 84 # endif 85 86 # ifdef __cpp_lib_atomic_is_always_lock_free 87 # error "__cpp_lib_atomic_is_always_lock_free should not be defined before c++17" 88 # endif 89 90 # ifdef __cpp_lib_atomic_lock_free_type_aliases 91 # error "__cpp_lib_atomic_lock_free_type_aliases should not be defined before c++20" 92 # endif 93 94 # ifdef __cpp_lib_atomic_min_max 95 # error "__cpp_lib_atomic_min_max should not be defined before c++26" 96 # endif 97 98 # ifdef __cpp_lib_atomic_ref 99 # error "__cpp_lib_atomic_ref should not be defined before c++20" 100 # endif 101 102 # ifdef __cpp_lib_atomic_shared_ptr 103 # error "__cpp_lib_atomic_shared_ptr should not be defined before c++20" 104 # endif 105 106 # ifdef __cpp_lib_atomic_value_initialization 107 # error "__cpp_lib_atomic_value_initialization should not be defined before c++20" 108 # endif 109 110 # ifdef __cpp_lib_atomic_wait 111 # error "__cpp_lib_atomic_wait should not be defined before c++20" 112 # endif 113 114 # ifdef __cpp_lib_char8_t 115 # error "__cpp_lib_char8_t should not be defined before c++20" 116 # endif 117 118 #elif TEST_STD_VER == 17 119 120 # ifdef __cpp_lib_atomic_flag_test 121 # error "__cpp_lib_atomic_flag_test should not be defined before c++20" 122 # endif 123 124 # ifdef __cpp_lib_atomic_float 125 # error "__cpp_lib_atomic_float should not be defined before c++20" 126 # endif 127 128 # ifndef __cpp_lib_atomic_is_always_lock_free 129 # error "__cpp_lib_atomic_is_always_lock_free should be defined in c++17" 130 # endif 131 # if __cpp_lib_atomic_is_always_lock_free != 201603L 132 # error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++17" 133 # endif 134 135 # ifdef __cpp_lib_atomic_lock_free_type_aliases 136 # error "__cpp_lib_atomic_lock_free_type_aliases should not be defined before c++20" 137 # endif 138 139 # ifdef __cpp_lib_atomic_min_max 140 # error "__cpp_lib_atomic_min_max should not be defined before c++26" 141 # endif 142 143 # ifdef __cpp_lib_atomic_ref 144 # error "__cpp_lib_atomic_ref should not be defined before c++20" 145 # endif 146 147 # ifdef __cpp_lib_atomic_shared_ptr 148 # error "__cpp_lib_atomic_shared_ptr should not be defined before c++20" 149 # endif 150 151 # ifdef __cpp_lib_atomic_value_initialization 152 # error "__cpp_lib_atomic_value_initialization should not be defined before c++20" 153 # endif 154 155 # ifdef __cpp_lib_atomic_wait 156 # error "__cpp_lib_atomic_wait should not be defined before c++20" 157 # endif 158 159 # ifdef __cpp_lib_char8_t 160 # error "__cpp_lib_char8_t should not be defined before c++20" 161 # endif 162 163 #elif TEST_STD_VER == 20 164 165 # ifndef __cpp_lib_atomic_flag_test 166 # error "__cpp_lib_atomic_flag_test should be defined in c++20" 167 # endif 168 # if __cpp_lib_atomic_flag_test != 201907L 169 # error "__cpp_lib_atomic_flag_test should have the value 201907L in c++20" 170 # endif 171 172 # if !defined(_LIBCPP_VERSION) 173 # ifndef __cpp_lib_atomic_float 174 # error "__cpp_lib_atomic_float should be defined in c++20" 175 # endif 176 # if __cpp_lib_atomic_float != 201711L 177 # error "__cpp_lib_atomic_float should have the value 201711L in c++20" 178 # endif 179 # else // _LIBCPP_VERSION 180 # ifdef __cpp_lib_atomic_float 181 # error "__cpp_lib_atomic_float should not be defined because it is unimplemented in libc++!" 182 # endif 183 # endif 184 185 # ifndef __cpp_lib_atomic_is_always_lock_free 186 # error "__cpp_lib_atomic_is_always_lock_free should be defined in c++20" 187 # endif 188 # if __cpp_lib_atomic_is_always_lock_free != 201603L 189 # error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++20" 190 # endif 191 192 # ifndef __cpp_lib_atomic_lock_free_type_aliases 193 # error "__cpp_lib_atomic_lock_free_type_aliases should be defined in c++20" 194 # endif 195 # if __cpp_lib_atomic_lock_free_type_aliases != 201907L 196 # error "__cpp_lib_atomic_lock_free_type_aliases should have the value 201907L in c++20" 197 # endif 198 199 # ifdef __cpp_lib_atomic_min_max 200 # error "__cpp_lib_atomic_min_max should not be defined before c++26" 201 # endif 202 203 # ifndef __cpp_lib_atomic_ref 204 # error "__cpp_lib_atomic_ref should be defined in c++20" 205 # endif 206 # if __cpp_lib_atomic_ref != 201806L 207 # error "__cpp_lib_atomic_ref should have the value 201806L in c++20" 208 # endif 209 210 # if !defined(_LIBCPP_VERSION) 211 # ifndef __cpp_lib_atomic_shared_ptr 212 # error "__cpp_lib_atomic_shared_ptr should be defined in c++20" 213 # endif 214 # if __cpp_lib_atomic_shared_ptr != 201711L 215 # error "__cpp_lib_atomic_shared_ptr should have the value 201711L in c++20" 216 # endif 217 # else // _LIBCPP_VERSION 218 # ifdef __cpp_lib_atomic_shared_ptr 219 # error "__cpp_lib_atomic_shared_ptr should not be defined because it is unimplemented in libc++!" 220 # endif 221 # endif 222 223 # ifndef __cpp_lib_atomic_value_initialization 224 # error "__cpp_lib_atomic_value_initialization should be defined in c++20" 225 # endif 226 # if __cpp_lib_atomic_value_initialization != 201911L 227 # error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++20" 228 # endif 229 230 # if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC 231 # ifndef __cpp_lib_atomic_wait 232 # error "__cpp_lib_atomic_wait should be defined in c++20" 233 # endif 234 # if __cpp_lib_atomic_wait != 201907L 235 # error "__cpp_lib_atomic_wait should have the value 201907L in c++20" 236 # endif 237 # else 238 # ifdef __cpp_lib_atomic_wait 239 # error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC' is not met!" 240 # endif 241 # endif 242 243 # if defined(__cpp_char8_t) 244 # ifndef __cpp_lib_char8_t 245 # error "__cpp_lib_char8_t should be defined in c++20" 246 # endif 247 # if __cpp_lib_char8_t != 201907L 248 # error "__cpp_lib_char8_t should have the value 201907L in c++20" 249 # endif 250 # else 251 # ifdef __cpp_lib_char8_t 252 # error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!" 253 # endif 254 # endif 255 256 #elif TEST_STD_VER == 23 257 258 # ifndef __cpp_lib_atomic_flag_test 259 # error "__cpp_lib_atomic_flag_test should be defined in c++23" 260 # endif 261 # if __cpp_lib_atomic_flag_test != 201907L 262 # error "__cpp_lib_atomic_flag_test should have the value 201907L in c++23" 263 # endif 264 265 # if !defined(_LIBCPP_VERSION) 266 # ifndef __cpp_lib_atomic_float 267 # error "__cpp_lib_atomic_float should be defined in c++23" 268 # endif 269 # if __cpp_lib_atomic_float != 201711L 270 # error "__cpp_lib_atomic_float should have the value 201711L in c++23" 271 # endif 272 # else // _LIBCPP_VERSION 273 # ifdef __cpp_lib_atomic_float 274 # error "__cpp_lib_atomic_float should not be defined because it is unimplemented in libc++!" 275 # endif 276 # endif 277 278 # ifndef __cpp_lib_atomic_is_always_lock_free 279 # error "__cpp_lib_atomic_is_always_lock_free should be defined in c++23" 280 # endif 281 # if __cpp_lib_atomic_is_always_lock_free != 201603L 282 # error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++23" 283 # endif 284 285 # ifndef __cpp_lib_atomic_lock_free_type_aliases 286 # error "__cpp_lib_atomic_lock_free_type_aliases should be defined in c++23" 287 # endif 288 # if __cpp_lib_atomic_lock_free_type_aliases != 201907L 289 # error "__cpp_lib_atomic_lock_free_type_aliases should have the value 201907L in c++23" 290 # endif 291 292 # ifdef __cpp_lib_atomic_min_max 293 # error "__cpp_lib_atomic_min_max should not be defined before c++26" 294 # endif 295 296 # ifndef __cpp_lib_atomic_ref 297 # error "__cpp_lib_atomic_ref should be defined in c++23" 298 # endif 299 # if __cpp_lib_atomic_ref != 201806L 300 # error "__cpp_lib_atomic_ref should have the value 201806L in c++23" 301 # endif 302 303 # if !defined(_LIBCPP_VERSION) 304 # ifndef __cpp_lib_atomic_shared_ptr 305 # error "__cpp_lib_atomic_shared_ptr should be defined in c++23" 306 # endif 307 # if __cpp_lib_atomic_shared_ptr != 201711L 308 # error "__cpp_lib_atomic_shared_ptr should have the value 201711L in c++23" 309 # endif 310 # else // _LIBCPP_VERSION 311 # ifdef __cpp_lib_atomic_shared_ptr 312 # error "__cpp_lib_atomic_shared_ptr should not be defined because it is unimplemented in libc++!" 313 # endif 314 # endif 315 316 # ifndef __cpp_lib_atomic_value_initialization 317 # error "__cpp_lib_atomic_value_initialization should be defined in c++23" 318 # endif 319 # if __cpp_lib_atomic_value_initialization != 201911L 320 # error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++23" 321 # endif 322 323 # if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC 324 # ifndef __cpp_lib_atomic_wait 325 # error "__cpp_lib_atomic_wait should be defined in c++23" 326 # endif 327 # if __cpp_lib_atomic_wait != 201907L 328 # error "__cpp_lib_atomic_wait should have the value 201907L in c++23" 329 # endif 330 # else 331 # ifdef __cpp_lib_atomic_wait 332 # error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC' is not met!" 333 # endif 334 # endif 335 336 # if defined(__cpp_char8_t) 337 # ifndef __cpp_lib_char8_t 338 # error "__cpp_lib_char8_t should be defined in c++23" 339 # endif 340 # if __cpp_lib_char8_t != 201907L 341 # error "__cpp_lib_char8_t should have the value 201907L in c++23" 342 # endif 343 # else 344 # ifdef __cpp_lib_char8_t 345 # error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!" 346 # endif 347 # endif 348 349 #elif TEST_STD_VER > 23 350 351 # ifndef __cpp_lib_atomic_flag_test 352 # error "__cpp_lib_atomic_flag_test should be defined in c++26" 353 # endif 354 # if __cpp_lib_atomic_flag_test != 201907L 355 # error "__cpp_lib_atomic_flag_test should have the value 201907L in c++26" 356 # endif 357 358 # if !defined(_LIBCPP_VERSION) 359 # ifndef __cpp_lib_atomic_float 360 # error "__cpp_lib_atomic_float should be defined in c++26" 361 # endif 362 # if __cpp_lib_atomic_float != 201711L 363 # error "__cpp_lib_atomic_float should have the value 201711L in c++26" 364 # endif 365 # else // _LIBCPP_VERSION 366 # ifdef __cpp_lib_atomic_float 367 # error "__cpp_lib_atomic_float should not be defined because it is unimplemented in libc++!" 368 # endif 369 # endif 370 371 # ifndef __cpp_lib_atomic_is_always_lock_free 372 # error "__cpp_lib_atomic_is_always_lock_free should be defined in c++26" 373 # endif 374 # if __cpp_lib_atomic_is_always_lock_free != 201603L 375 # error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++26" 376 # endif 377 378 # ifndef __cpp_lib_atomic_lock_free_type_aliases 379 # error "__cpp_lib_atomic_lock_free_type_aliases should be defined in c++26" 380 # endif 381 # if __cpp_lib_atomic_lock_free_type_aliases != 201907L 382 # error "__cpp_lib_atomic_lock_free_type_aliases should have the value 201907L in c++26" 383 # endif 384 385 # if !defined(_LIBCPP_VERSION) 386 # ifndef __cpp_lib_atomic_min_max 387 # error "__cpp_lib_atomic_min_max should be defined in c++26" 388 # endif 389 # if __cpp_lib_atomic_min_max != 202403L 390 # error "__cpp_lib_atomic_min_max should have the value 202403L in c++26" 391 # endif 392 # else // _LIBCPP_VERSION 393 # ifdef __cpp_lib_atomic_min_max 394 # error "__cpp_lib_atomic_min_max should not be defined because it is unimplemented in libc++!" 395 # endif 396 # endif 397 398 # ifndef __cpp_lib_atomic_ref 399 # error "__cpp_lib_atomic_ref should be defined in c++26" 400 # endif 401 # if __cpp_lib_atomic_ref != 201806L 402 # error "__cpp_lib_atomic_ref should have the value 201806L in c++26" 403 # endif 404 405 # if !defined(_LIBCPP_VERSION) 406 # ifndef __cpp_lib_atomic_shared_ptr 407 # error "__cpp_lib_atomic_shared_ptr should be defined in c++26" 408 # endif 409 # if __cpp_lib_atomic_shared_ptr != 201711L 410 # error "__cpp_lib_atomic_shared_ptr should have the value 201711L in c++26" 411 # endif 412 # else // _LIBCPP_VERSION 413 # ifdef __cpp_lib_atomic_shared_ptr 414 # error "__cpp_lib_atomic_shared_ptr should not be defined because it is unimplemented in libc++!" 415 # endif 416 # endif 417 418 # ifndef __cpp_lib_atomic_value_initialization 419 # error "__cpp_lib_atomic_value_initialization should be defined in c++26" 420 # endif 421 # if __cpp_lib_atomic_value_initialization != 201911L 422 # error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++26" 423 # endif 424 425 # if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC 426 # ifndef __cpp_lib_atomic_wait 427 # error "__cpp_lib_atomic_wait should be defined in c++26" 428 # endif 429 # if __cpp_lib_atomic_wait != 201907L 430 # error "__cpp_lib_atomic_wait should have the value 201907L in c++26" 431 # endif 432 # else 433 # ifdef __cpp_lib_atomic_wait 434 # error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC' is not met!" 435 # endif 436 # endif 437 438 # if defined(__cpp_char8_t) 439 # ifndef __cpp_lib_char8_t 440 # error "__cpp_lib_char8_t should be defined in c++26" 441 # endif 442 # if __cpp_lib_char8_t != 201907L 443 # error "__cpp_lib_char8_t should have the value 201907L in c++26" 444 # endif 445 # else 446 # ifdef __cpp_lib_char8_t 447 # error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!" 448 # endif 449 # endif 450 451 #endif // TEST_STD_VER > 23 452 453