1 // -*- C++ -*- 2 //===--------------------------- __config ---------------------------------===// 3 // 4 // The LLVM Compiler Infrastructure 5 // 6 // This file is dual licensed under the MIT and the University of Illinois Open 7 // Source Licenses. See LICENSE.TXT for details. 8 // 9 //===----------------------------------------------------------------------===// 10 11 #ifndef _LIBCPP_CONFIG 12 #define _LIBCPP_CONFIG 13 14 #if defined(_MSC_VER) && !defined(__clang__) 15 #define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER 16 #endif 17 18 #ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER 19 #pragma GCC system_header 20 #endif 21 22 #ifdef __cplusplus 23 24 #ifdef __GNUC__ 25 #define _GNUC_VER (__GNUC__ * 100 + __GNUC_MINOR__) 26 #else 27 #define _GNUC_VER 0 28 #endif 29 30 #define _LIBCPP_VERSION 3900 31 32 #ifndef _LIBCPP_ABI_VERSION 33 #define _LIBCPP_ABI_VERSION 1 34 #endif 35 36 #if defined(_LIBCPP_ABI_UNSTABLE) || _LIBCPP_ABI_VERSION >= 2 37 // Change short string represention so that string data starts at offset 0, 38 // improving its alignment in some cases. 39 #define _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT 40 // Fix deque iterator type in order to support incomplete types. 41 #define _LIBCPP_ABI_INCOMPLETE_TYPES_IN_DEQUE 42 // Fix undefined behavior in how std::list stores it's linked nodes. 43 #define _LIBCPP_ABI_LIST_REMOVE_NODE_POINTER_UB 44 #define _LIBCPP_ABI_FORWARD_LIST_REMOVE_NODE_POINTER_UB 45 #define _LIBCPP_ABI_FIX_UNORDERED_CONTAINER_SIZE_TYPE 46 #endif 47 48 #define _LIBCPP_CONCAT1(_LIBCPP_X,_LIBCPP_Y) _LIBCPP_X##_LIBCPP_Y 49 #define _LIBCPP_CONCAT(_LIBCPP_X,_LIBCPP_Y) _LIBCPP_CONCAT1(_LIBCPP_X,_LIBCPP_Y) 50 51 #define _LIBCPP_NAMESPACE _LIBCPP_CONCAT(__ndk,_LIBCPP_ABI_VERSION) 52 53 54 #ifndef __has_attribute 55 #define __has_attribute(__x) 0 56 #endif 57 #ifndef __has_builtin 58 #define __has_builtin(__x) 0 59 #endif 60 #ifndef __has_extension 61 #define __has_extension(__x) 0 62 #endif 63 #ifndef __has_feature 64 #define __has_feature(__x) 0 65 #endif 66 // '__is_identifier' returns '0' if '__x' is a reserved identifier provided by 67 // the compiler and '1' otherwise. 68 #ifndef __is_identifier 69 #define __is_identifier(__x) 1 70 #endif 71 72 73 #ifdef __LITTLE_ENDIAN__ 74 #if __LITTLE_ENDIAN__ 75 #define _LIBCPP_LITTLE_ENDIAN 1 76 #define _LIBCPP_BIG_ENDIAN 0 77 #endif // __LITTLE_ENDIAN__ 78 #endif // __LITTLE_ENDIAN__ 79 80 #ifdef __BIG_ENDIAN__ 81 #if __BIG_ENDIAN__ 82 #define _LIBCPP_LITTLE_ENDIAN 0 83 #define _LIBCPP_BIG_ENDIAN 1 84 #endif // __BIG_ENDIAN__ 85 #endif // __BIG_ENDIAN__ 86 87 #ifdef __BYTE_ORDER__ 88 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 89 #define _LIBCPP_LITTLE_ENDIAN 1 90 #define _LIBCPP_BIG_ENDIAN 0 91 #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ 92 #define _LIBCPP_LITTLE_ENDIAN 0 93 #define _LIBCPP_BIG_ENDIAN 1 94 #endif // __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ 95 #endif // __BYTE_ORDER__ 96 97 #ifdef __FreeBSD__ 98 # include <sys/endian.h> 99 # if _BYTE_ORDER == _LITTLE_ENDIAN 100 # define _LIBCPP_LITTLE_ENDIAN 1 101 # define _LIBCPP_BIG_ENDIAN 0 102 # else // _BYTE_ORDER == _LITTLE_ENDIAN 103 # define _LIBCPP_LITTLE_ENDIAN 0 104 # define _LIBCPP_BIG_ENDIAN 1 105 # endif // _BYTE_ORDER == _LITTLE_ENDIAN 106 # ifndef __LONG_LONG_SUPPORTED 107 # define _LIBCPP_HAS_NO_LONG_LONG 108 # endif // __LONG_LONG_SUPPORTED 109 #endif // __FreeBSD__ 110 111 #ifdef __NetBSD__ 112 # include <sys/endian.h> 113 # if _BYTE_ORDER == _LITTLE_ENDIAN 114 # define _LIBCPP_LITTLE_ENDIAN 1 115 # define _LIBCPP_BIG_ENDIAN 0 116 # else // _BYTE_ORDER == _LITTLE_ENDIAN 117 # define _LIBCPP_LITTLE_ENDIAN 0 118 # define _LIBCPP_BIG_ENDIAN 1 119 # endif // _BYTE_ORDER == _LITTLE_ENDIAN 120 # define _LIBCPP_HAS_QUICK_EXIT 121 #endif // __NetBSD__ 122 123 #ifdef _WIN32 124 # define _LIBCPP_LITTLE_ENDIAN 1 125 # define _LIBCPP_BIG_ENDIAN 0 126 // Compiler intrinsics (MSVC) 127 #if defined(_MSC_VER) && _MSC_VER >= 1400 128 # define _LIBCPP_HAS_IS_BASE_OF 129 # endif 130 # if defined(_MSC_VER) && !defined(__clang__) 131 # define _LIBCPP_MSVC // Using Microsoft Visual C++ compiler 132 # define _LIBCPP_TOSTRING2(x) #x 133 # define _LIBCPP_TOSTRING(x) _LIBCPP_TOSTRING2(x) 134 # define _LIBCPP_WARNING(x) __pragma(message(__FILE__ "(" _LIBCPP_TOSTRING(__LINE__) ") : warning note: " x)) 135 # endif 136 # // If mingw not explicitly detected, assume using MS C runtime only. 137 # ifndef __MINGW32__ 138 # define _LIBCPP_MSVCRT // Using Microsoft's C Runtime library 139 # endif 140 #endif // _WIN32 141 142 #ifdef __sun__ 143 # include <sys/isa_defs.h> 144 # ifdef _LITTLE_ENDIAN 145 # define _LIBCPP_LITTLE_ENDIAN 1 146 # define _LIBCPP_BIG_ENDIAN 0 147 # else 148 # define _LIBCPP_LITTLE_ENDIAN 0 149 # define _LIBCPP_BIG_ENDIAN 1 150 # endif 151 #endif // __sun__ 152 153 #if defined(__CloudABI__) 154 // Certain architectures provide arc4random(). Prefer using 155 // arc4random() over /dev/{u,}random to make it possible to obtain 156 // random data even when using sandboxing mechanisms such as chroots, 157 // Capsicum, etc. 158 # define _LIBCPP_USING_ARC4_RANDOM 159 #elif defined(__native_client__) 160 // NaCl's sandbox (which PNaCl also runs in) doesn't allow filesystem access, 161 // including accesses to the special files under /dev. C++11's 162 // std::random_device is instead exposed through a NaCl syscall. 163 # define _LIBCPP_USING_NACL_RANDOM 164 #elif defined(_WIN32) 165 # define _LIBCPP_USING_WIN32_RANDOM 166 #else 167 # define _LIBCPP_USING_DEV_RANDOM 168 #endif 169 170 #if !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN) 171 # include <endian.h> 172 # if __BYTE_ORDER == __LITTLE_ENDIAN 173 # define _LIBCPP_LITTLE_ENDIAN 1 174 # define _LIBCPP_BIG_ENDIAN 0 175 # elif __BYTE_ORDER == __BIG_ENDIAN 176 # define _LIBCPP_LITTLE_ENDIAN 0 177 # define _LIBCPP_BIG_ENDIAN 1 178 # else // __BYTE_ORDER == __BIG_ENDIAN 179 # error unable to determine endian 180 # endif 181 #endif // !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN) 182 183 #if __has_attribute(__no_sanitize__) 184 #define _LIBCPP_NO_CFI __attribute__((__no_sanitize__("cfi"))) 185 #else 186 #define _LIBCPP_NO_CFI 187 #endif 188 189 #ifdef _WIN32 190 191 // only really useful for a DLL 192 #ifdef _LIBCPP_DLL // this should be a compiler builtin define ideally... 193 # ifdef cxx_EXPORTS 194 # define _LIBCPP_HIDDEN 195 # define _LIBCPP_FUNC_VIS __declspec(dllexport) 196 # define _LIBCPP_TYPE_VIS __declspec(dllexport) 197 # else 198 # define _LIBCPP_HIDDEN 199 # define _LIBCPP_FUNC_VIS __declspec(dllimport) 200 # define _LIBCPP_TYPE_VIS __declspec(dllimport) 201 # endif 202 #else 203 # define _LIBCPP_HIDDEN 204 # define _LIBCPP_FUNC_VIS 205 # define _LIBCPP_TYPE_VIS 206 #endif 207 208 #define _LIBCPP_TYPE_VIS_ONLY 209 #define _LIBCPP_FUNC_VIS_ONLY 210 211 #ifndef _LIBCPP_INLINE_VISIBILITY 212 # ifdef _LIBCPP_MSVC 213 # define _LIBCPP_INLINE_VISIBILITY __forceinline 214 # else // MinGW GCC and Clang 215 # define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__always_inline__)) 216 # endif 217 #endif 218 219 #ifndef _LIBCPP_EXCEPTION_ABI 220 #define _LIBCPP_EXCEPTION_ABI _LIBCPP_TYPE_VIS 221 #endif 222 223 #ifndef _LIBCPP_ALWAYS_INLINE 224 # ifdef _LIBCPP_MSVC 225 # define _LIBCPP_ALWAYS_INLINE __forceinline 226 # endif 227 #endif 228 229 #endif // _WIN32 230 231 #ifndef _LIBCPP_HIDDEN 232 #define _LIBCPP_HIDDEN __attribute__ ((__visibility__("hidden"))) 233 #endif 234 235 #ifndef _LIBCPP_FUNC_VIS 236 #define _LIBCPP_FUNC_VIS __attribute__ ((__visibility__("default"))) 237 #endif 238 239 #ifndef _LIBCPP_TYPE_VIS 240 # if __has_attribute(__type_visibility__) 241 # define _LIBCPP_TYPE_VIS __attribute__ ((__type_visibility__("default"))) 242 # else 243 # define _LIBCPP_TYPE_VIS __attribute__ ((__visibility__("default"))) 244 # endif 245 #endif 246 247 #ifndef _LIBCPP_PREFERRED_OVERLOAD 248 # if __has_attribute(__enable_if__) 249 # define _LIBCPP_PREFERRED_OVERLOAD __attribute__ ((__enable_if__(true, ""))) 250 # endif 251 #endif 252 253 #ifndef _LIBCPP_TYPE_VIS_ONLY 254 # define _LIBCPP_TYPE_VIS_ONLY _LIBCPP_TYPE_VIS 255 #endif 256 257 #ifndef _LIBCPP_FUNC_VIS_ONLY 258 # define _LIBCPP_FUNC_VIS_ONLY _LIBCPP_FUNC_VIS 259 #endif 260 261 #ifndef _LIBCPP_INLINE_VISIBILITY 262 #define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__visibility__("hidden"), __always_inline__)) 263 #endif 264 265 #ifndef _LIBCPP_EXCEPTION_ABI 266 #define _LIBCPP_EXCEPTION_ABI __attribute__ ((__visibility__("default"))) 267 #endif 268 269 #ifndef _LIBCPP_ALWAYS_INLINE 270 #define _LIBCPP_ALWAYS_INLINE __attribute__ ((__visibility__("hidden"), __always_inline__)) 271 #endif 272 273 #if defined(__clang__) 274 275 // _LIBCPP_ALTERNATE_STRING_LAYOUT is an old name for 276 // _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT left here for backward compatibility. 277 #if (defined(__APPLE__) && !defined(__i386__) && !defined(__x86_64__) && \ 278 !defined(__arm__)) || \ 279 defined(_LIBCPP_ALTERNATE_STRING_LAYOUT) 280 #define _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT 281 #endif 282 283 #if __has_feature(cxx_alignas) 284 # define _ALIGNAS_TYPE(x) alignas(x) 285 # define _ALIGNAS(x) alignas(x) 286 #else 287 # define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x)))) 288 # define _ALIGNAS(x) __attribute__((__aligned__(x))) 289 #endif 290 291 #if !__has_feature(cxx_alias_templates) 292 #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 293 #endif 294 295 #if __cplusplus < 201103L 296 typedef __char16_t char16_t; 297 typedef __char32_t char32_t; 298 #endif 299 300 #if !(__has_feature(cxx_exceptions)) && !defined(_LIBCPP_NO_EXCEPTIONS) 301 #define _LIBCPP_NO_EXCEPTIONS 302 #endif 303 304 #if !(__has_feature(cxx_rtti)) 305 #define _LIBCPP_NO_RTTI 306 #endif 307 308 #if !(__has_feature(cxx_strong_enums)) 309 #define _LIBCPP_HAS_NO_STRONG_ENUMS 310 #endif 311 312 #if !(__has_feature(cxx_decltype)) 313 #define _LIBCPP_HAS_NO_DECLTYPE 314 #endif 315 316 #if __has_feature(cxx_attributes) 317 # define _LIBCPP_NORETURN [[noreturn]] 318 #else 319 # define _LIBCPP_NORETURN __attribute__ ((noreturn)) 320 #endif 321 322 #if !(__has_feature(cxx_default_function_template_args)) 323 #define _LIBCPP_HAS_NO_DEFAULT_FUNCTION_TEMPLATE_ARGS 324 #endif 325 326 #if !(__has_feature(cxx_defaulted_functions)) 327 #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 328 #endif // !(__has_feature(cxx_defaulted_functions)) 329 330 #if !(__has_feature(cxx_deleted_functions)) 331 #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 332 #endif // !(__has_feature(cxx_deleted_functions)) 333 334 #if !(__has_feature(cxx_lambdas)) 335 #define _LIBCPP_HAS_NO_LAMBDAS 336 #endif 337 338 #if !(__has_feature(cxx_nullptr)) 339 #define _LIBCPP_HAS_NO_NULLPTR 340 #endif 341 342 #if !(__has_feature(cxx_rvalue_references)) 343 #define _LIBCPP_HAS_NO_RVALUE_REFERENCES 344 #endif 345 346 #if !(__has_feature(cxx_static_assert)) 347 #define _LIBCPP_HAS_NO_STATIC_ASSERT 348 #endif 349 350 #if !(__has_feature(cxx_auto_type)) 351 #define _LIBCPP_HAS_NO_AUTO_TYPE 352 #endif 353 354 #if !(__has_feature(cxx_access_control_sfinae)) || !__has_feature(cxx_trailing_return) 355 #define _LIBCPP_HAS_NO_ADVANCED_SFINAE 356 #endif 357 358 #if !(__has_feature(cxx_variadic_templates)) 359 #define _LIBCPP_HAS_NO_VARIADICS 360 #endif 361 362 #if !(__has_feature(cxx_trailing_return)) 363 #define _LIBCPP_HAS_NO_TRAILING_RETURN 364 #endif 365 366 #if !(__has_feature(cxx_generalized_initializers)) 367 #define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 368 #endif 369 370 #if __has_feature(is_base_of) 371 # define _LIBCPP_HAS_IS_BASE_OF 372 #endif 373 374 #if __has_feature(is_final) 375 # define _LIBCPP_HAS_IS_FINAL 376 #endif 377 378 // Objective-C++ features (opt-in) 379 #if __has_feature(objc_arc) 380 #define _LIBCPP_HAS_OBJC_ARC 381 #endif 382 383 #if __has_feature(objc_arc_weak) 384 #define _LIBCPP_HAS_OBJC_ARC_WEAK 385 #define _LIBCPP_HAS_NO_STRONG_ENUMS 386 #endif 387 388 #if !(__has_feature(cxx_constexpr)) 389 #define _LIBCPP_HAS_NO_CONSTEXPR 390 #endif 391 392 #if !(__has_feature(cxx_relaxed_constexpr)) 393 #define _LIBCPP_HAS_NO_CXX14_CONSTEXPR 394 #endif 395 396 #if !(__has_feature(cxx_variable_templates)) 397 #define _LIBCPP_HAS_NO_VARIABLE_TEMPLATES 398 #endif 399 400 #if __ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L 401 #if defined(__FreeBSD__) 402 #define _LIBCPP_HAS_QUICK_EXIT 403 #define _LIBCPP_HAS_C11_FEATURES 404 #elif defined(__ANDROID__) 405 #define _LIBCPP_HAS_QUICK_EXIT 406 #elif defined(__linux__) 407 #if !defined(_LIBCPP_HAS_MUSL_LIBC) 408 # include <features.h> 409 #if __GLIBC_PREREQ(2, 15) 410 #define _LIBCPP_HAS_QUICK_EXIT 411 #endif 412 #if __GLIBC_PREREQ(2, 17) 413 #define _LIBCPP_HAS_C11_FEATURES 414 #endif 415 #else // defined(_LIBCPP_HAS_MUSL_LIBC) 416 #define _LIBCPP_HAS_QUICK_EXIT 417 #define _LIBCPP_HAS_C11_FEATURES 418 #endif 419 #endif // __linux__ 420 #endif 421 422 #if !(__has_feature(cxx_noexcept)) 423 #define _LIBCPP_HAS_NO_NOEXCEPT 424 #endif 425 426 #if __has_feature(underlying_type) 427 # define _LIBCPP_UNDERLYING_TYPE(T) __underlying_type(T) 428 #endif 429 430 #if __has_feature(is_literal) 431 # define _LIBCPP_IS_LITERAL(T) __is_literal(T) 432 #endif 433 434 // Inline namespaces are available in Clang regardless of C++ dialect. 435 #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE { 436 #define _LIBCPP_END_NAMESPACE_STD } } 437 #define _VSTD std::_LIBCPP_NAMESPACE 438 439 namespace std { 440 inline namespace _LIBCPP_NAMESPACE { 441 } 442 } 443 444 #if !defined(_LIBCPP_HAS_NO_ASAN) && !__has_feature(address_sanitizer) 445 #define _LIBCPP_HAS_NO_ASAN 446 #endif 447 448 // Allow for build-time disabling of unsigned integer sanitization 449 #if !defined(_LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK) && __has_attribute(no_sanitize) 450 #define _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK __attribute__((__no_sanitize__("unsigned-integer-overflow"))) 451 #endif 452 453 #elif defined(__GNUC__) 454 455 #define _ALIGNAS(x) __attribute__((__aligned__(x))) 456 #define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x)))) 457 458 #define _LIBCPP_NORETURN __attribute__((noreturn)) 459 460 #if _GNUC_VER >= 407 461 #define _LIBCPP_UNDERLYING_TYPE(T) __underlying_type(T) 462 #define _LIBCPP_IS_LITERAL(T) __is_literal_type(T) 463 #define _LIBCPP_HAS_IS_FINAL 464 #endif 465 466 #if defined(__GNUC__) && _GNUC_VER >= 403 467 # define _LIBCPP_HAS_IS_BASE_OF 468 #endif 469 470 #if !__EXCEPTIONS 471 #define _LIBCPP_NO_EXCEPTIONS 472 #endif 473 474 // constexpr was added to GCC in 4.6. 475 #if _GNUC_VER < 406 476 #define _LIBCPP_HAS_NO_CONSTEXPR 477 // Can only use constexpr in c++11 mode. 478 #elif !defined(__GXX_EXPERIMENTAL_CXX0X__) && __cplusplus < 201103L 479 #define _LIBCPP_HAS_NO_CONSTEXPR 480 #endif 481 482 // Determine if GCC supports relaxed constexpr 483 #if !defined(__cpp_constexpr) || __cpp_constexpr < 201304L 484 #define _LIBCPP_HAS_NO_CXX14_CONSTEXPR 485 #endif 486 487 // GCC 5 will support variable templates 488 #if !defined(__cpp_variable_templates) || __cpp_variable_templates < 201304L 489 #define _LIBCPP_HAS_NO_VARIABLE_TEMPLATES 490 #endif 491 492 #ifndef __GXX_EXPERIMENTAL_CXX0X__ 493 494 #define _LIBCPP_HAS_NO_ADVANCED_SFINAE 495 #define _LIBCPP_HAS_NO_DECLTYPE 496 #define _LIBCPP_HAS_NO_DEFAULT_FUNCTION_TEMPLATE_ARGS 497 #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 498 #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 499 #define _LIBCPP_HAS_NO_NULLPTR 500 #define _LIBCPP_HAS_NO_STATIC_ASSERT 501 #define _LIBCPP_HAS_NO_UNICODE_CHARS 502 #define _LIBCPP_HAS_NO_VARIADICS 503 #define _LIBCPP_HAS_NO_RVALUE_REFERENCES 504 #define _LIBCPP_HAS_NO_STRONG_ENUMS 505 #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 506 #define _LIBCPP_HAS_NO_NOEXCEPT 507 508 #else // __GXX_EXPERIMENTAL_CXX0X__ 509 510 #if _GNUC_VER < 403 511 #define _LIBCPP_HAS_NO_DEFAULT_FUNCTION_TEMPLATE_ARGS 512 #define _LIBCPP_HAS_NO_RVALUE_REFERENCES 513 #define _LIBCPP_HAS_NO_STATIC_ASSERT 514 #endif 515 516 517 #if _GNUC_VER < 404 518 #define _LIBCPP_HAS_NO_DECLTYPE 519 #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 520 #define _LIBCPP_HAS_NO_TRAILING_RETURN 521 #define _LIBCPP_HAS_NO_UNICODE_CHARS 522 #define _LIBCPP_HAS_NO_VARIADICS 523 #define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 524 #endif // _GNUC_VER < 404 525 526 #if _GNUC_VER < 406 527 #define _LIBCPP_HAS_NO_NOEXCEPT 528 #define _LIBCPP_HAS_NO_NULLPTR 529 #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 530 #endif 531 532 #if _GNUC_VER < 407 533 #define _LIBCPP_HAS_NO_ADVANCED_SFINAE 534 #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 535 #endif 536 537 #endif // __GXX_EXPERIMENTAL_CXX0X__ 538 539 #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { namespace _LIBCPP_NAMESPACE { 540 #define _LIBCPP_END_NAMESPACE_STD } } 541 #define _VSTD std::_LIBCPP_NAMESPACE 542 543 namespace std { 544 namespace _LIBCPP_NAMESPACE { 545 } 546 using namespace _LIBCPP_NAMESPACE __attribute__((__strong__)); 547 } 548 549 #if !defined(_LIBCPP_HAS_NO_ASAN) && !defined(__SANITIZE_ADDRESS__) 550 #define _LIBCPP_HAS_NO_ASAN 551 #endif 552 553 #elif defined(_LIBCPP_MSVC) 554 555 #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 556 #define _LIBCPP_HAS_NO_CONSTEXPR 557 #define _LIBCPP_HAS_NO_CXX14_CONSTEXPR 558 #define _LIBCPP_HAS_NO_VARIABLE_TEMPLATES 559 #define _LIBCPP_HAS_NO_UNICODE_CHARS 560 #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 561 #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 562 #define _LIBCPP_HAS_NO_NOEXCEPT 563 #define __alignof__ __alignof 564 #define _LIBCPP_NORETURN __declspec(noreturn) 565 #define _ALIGNAS(x) __declspec(align(x)) 566 #define _LIBCPP_HAS_NO_VARIADICS 567 568 569 570 #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { 571 #define _LIBCPP_END_NAMESPACE_STD } 572 #define _VSTD std 573 574 # define _LIBCPP_WEAK 575 namespace std { 576 } 577 578 #define _LIBCPP_HAS_NO_ASAN 579 580 #elif defined(__IBMCPP__) 581 582 #define _ALIGNAS(x) __attribute__((__aligned__(x))) 583 #define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x)))) 584 #define _ATTRIBUTE(x) __attribute__((x)) 585 #define _LIBCPP_NORETURN __attribute__((noreturn)) 586 587 #define _LIBCPP_HAS_NO_DEFAULT_FUNCTION_TEMPLATE_ARGS 588 #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 589 #define _LIBCPP_HAS_NO_ADVANCED_SFINAE 590 #define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 591 #define _LIBCPP_HAS_NO_NOEXCEPT 592 #define _LIBCPP_HAS_NO_NULLPTR 593 #define _LIBCPP_HAS_NO_UNICODE_CHARS 594 #define _LIBCPP_HAS_IS_BASE_OF 595 #define _LIBCPP_HAS_IS_FINAL 596 #define _LIBCPP_HAS_NO_VARIABLE_TEMPLATES 597 598 #if defined(_AIX) 599 #define __MULTILOCALE_API 600 #endif 601 602 #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE { 603 #define _LIBCPP_END_NAMESPACE_STD } } 604 #define _VSTD std::_LIBCPP_NAMESPACE 605 606 namespace std { 607 inline namespace _LIBCPP_NAMESPACE { 608 } 609 } 610 611 #define _LIBCPP_HAS_NO_ASAN 612 613 #endif // __clang__ || __GNUC__ || _MSC_VER || __IBMCPP__ 614 615 #ifndef _LIBCPP_HAS_NO_NOEXCEPT 616 # define _NOEXCEPT noexcept 617 # define _NOEXCEPT_(x) noexcept(x) 618 #else 619 # define _NOEXCEPT throw() 620 # define _NOEXCEPT_(x) 621 #endif 622 623 #ifdef _LIBCPP_HAS_NO_UNICODE_CHARS 624 typedef unsigned short char16_t; 625 typedef unsigned int char32_t; 626 #endif // _LIBCPP_HAS_NO_UNICODE_CHARS 627 628 #ifndef __SIZEOF_INT128__ 629 #define _LIBCPP_HAS_NO_INT128 630 #endif 631 632 #ifdef _LIBCPP_HAS_NO_STATIC_ASSERT 633 634 extern "C++" { 635 template <bool> struct __static_assert_test; 636 template <> struct __static_assert_test<true> {}; 637 template <unsigned> struct __static_assert_check {}; 638 } 639 #define static_assert(__b, __m) \ 640 typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \ 641 _LIBCPP_CONCAT(__t, __LINE__) 642 643 #endif // _LIBCPP_HAS_NO_STATIC_ASSERT 644 645 #ifdef _LIBCPP_HAS_NO_DECLTYPE 646 // GCC 4.6 provides __decltype in all standard modes. 647 #if !__is_identifier(__decltype) || _GNUC_VER >= 406 648 # define decltype(__x) __decltype(__x) 649 #else 650 # define decltype(__x) __typeof__(__x) 651 #endif 652 #endif 653 654 #ifdef _LIBCPP_HAS_NO_CONSTEXPR 655 #define _LIBCPP_CONSTEXPR 656 #else 657 #define _LIBCPP_CONSTEXPR constexpr 658 #endif 659 660 #ifdef _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 661 #define _LIBCPP_DEFAULT {} 662 #else 663 #define _LIBCPP_DEFAULT = default; 664 #endif 665 666 #ifdef _LIBCPP_HAS_NO_DELETED_FUNCTIONS 667 #define _LIBCPP_EQUAL_DELETE 668 #else 669 #define _LIBCPP_EQUAL_DELETE = delete 670 #endif 671 672 #ifdef __GNUC__ 673 #define _NOALIAS __attribute__((__malloc__)) 674 #else 675 #define _NOALIAS 676 #endif 677 678 #if __has_feature(cxx_explicit_conversions) || defined(__IBMCPP__) 679 # define _LIBCPP_EXPLICIT explicit 680 #else 681 # define _LIBCPP_EXPLICIT 682 #endif 683 684 #if !__has_builtin(__builtin_operator_new) || !__has_builtin(__builtin_operator_delete) 685 # define _LIBCPP_HAS_NO_BUILTIN_OPERATOR_NEW_DELETE 686 #endif 687 688 #ifdef _LIBCPP_HAS_NO_STRONG_ENUMS 689 #define _LIBCPP_DECLARE_STRONG_ENUM(x) struct _LIBCPP_TYPE_VIS x { enum __lx 690 #define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) \ 691 __lx __v_; \ 692 _LIBCPP_ALWAYS_INLINE x(__lx __v) : __v_(__v) {} \ 693 _LIBCPP_ALWAYS_INLINE explicit x(int __v) : __v_(static_cast<__lx>(__v)) {} \ 694 _LIBCPP_ALWAYS_INLINE operator int() const {return __v_;} \ 695 }; 696 #else // _LIBCPP_HAS_NO_STRONG_ENUMS 697 #define _LIBCPP_DECLARE_STRONG_ENUM(x) enum class _LIBCPP_TYPE_VIS x 698 #define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) 699 #endif // _LIBCPP_HAS_NO_STRONG_ENUMS 700 701 #ifdef _LIBCPP_DEBUG 702 # if _LIBCPP_DEBUG == 0 703 # define _LIBCPP_DEBUG_LEVEL 1 704 # elif _LIBCPP_DEBUG == 1 705 # define _LIBCPP_DEBUG_LEVEL 2 706 # else 707 # error Supported values for _LIBCPP_DEBUG are 0 and 1 708 # endif 709 # define _LIBCPP_EXTERN_TEMPLATE(...) 710 #endif 711 712 #ifndef _LIBCPP_EXTERN_TEMPLATE 713 #define _LIBCPP_EXTERN_TEMPLATE(...) 714 #endif 715 716 #ifndef _LIBCPP_EXTERN_TEMPLATE2 717 #define _LIBCPP_EXTERN_TEMPLATE2(...) extern template __VA_ARGS__; 718 #endif 719 720 #if defined(__APPLE__) && defined(__LP64__) && !defined(__x86_64__) 721 #define _LIBCPP_NONUNIQUE_RTTI_BIT (1ULL << 63) 722 #endif 723 724 #if defined(__APPLE__) || defined(__FreeBSD__) || defined(_WIN32) || \ 725 defined(__sun__) || defined(__NetBSD__) || defined(__CloudABI__) 726 #define _LIBCPP_LOCALE__L_EXTENSIONS 1 727 #endif 728 729 #if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) 730 // Most unix variants have catopen. These are the specific ones that don't. 731 #if !defined(_WIN32) && !defined(__ANDROID__) && !defined(_NEWLIB_VERSION) 732 #define _LIBCPP_HAS_CATOPEN 1 733 #endif 734 #endif 735 736 #ifdef __FreeBSD__ 737 #define _DECLARE_C99_LDBL_MATH 1 738 #endif 739 740 #if defined(__APPLE__) || defined(__FreeBSD__) 741 #define _LIBCPP_HAS_DEFAULTRUNELOCALE 742 #endif 743 744 #if defined(__APPLE__) || defined(__FreeBSD__) || defined(__sun__) 745 #define _LIBCPP_WCTYPE_IS_MASK 746 #endif 747 748 #ifndef _LIBCPP_TRIVIAL_PAIR_COPY_CTOR 749 # define _LIBCPP_TRIVIAL_PAIR_COPY_CTOR 1 750 #endif 751 752 #ifndef _LIBCPP_STD_VER 753 # if __cplusplus <= 201103L 754 # define _LIBCPP_STD_VER 11 755 # elif __cplusplus <= 201402L 756 # define _LIBCPP_STD_VER 14 757 # else 758 # define _LIBCPP_STD_VER 15 // current year, or date of c++17 ratification 759 # endif 760 #endif // _LIBCPP_STD_VER 761 762 #if _LIBCPP_STD_VER > 11 763 #define _LIBCPP_DEPRECATED [[deprecated]] 764 #else 765 #define _LIBCPP_DEPRECATED 766 #endif 767 768 #if _LIBCPP_STD_VER <= 11 769 #define _LIBCPP_EXPLICIT_AFTER_CXX11 770 #define _LIBCPP_DEPRECATED_AFTER_CXX11 771 #else 772 #define _LIBCPP_EXPLICIT_AFTER_CXX11 explicit 773 #define _LIBCPP_DEPRECATED_AFTER_CXX11 [[deprecated]] 774 #endif 775 776 #if _LIBCPP_STD_VER > 11 && !defined(_LIBCPP_HAS_NO_CXX14_CONSTEXPR) 777 #define _LIBCPP_CONSTEXPR_AFTER_CXX11 constexpr 778 #else 779 #define _LIBCPP_CONSTEXPR_AFTER_CXX11 780 #endif 781 782 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_CXX14_CONSTEXPR) 783 #define _LIBCPP_CONSTEXPR_AFTER_CXX14 constexpr 784 #else 785 #define _LIBCPP_CONSTEXPR_AFTER_CXX14 786 #endif 787 788 #ifdef _LIBCPP_HAS_NO_RVALUE_REFERENCES 789 # define _LIBCPP_EXPLICIT_MOVE(x) _VSTD::move(x) 790 #else 791 # define _LIBCPP_EXPLICIT_MOVE(x) (x) 792 #endif 793 794 #ifndef _LIBCPP_HAS_NO_ASAN 795 extern "C" void __sanitizer_annotate_contiguous_container( 796 const void *, const void *, const void *, const void *); 797 #endif 798 799 // Try to find out if RTTI is disabled. 800 // g++ and cl.exe have RTTI on by default and define a macro when it is. 801 // g++ only defines the macro in 4.3.2 and onwards. 802 #if !defined(_LIBCPP_NO_RTTI) 803 # if defined(__GNUC__) && ((__GNUC__ >= 5) || (__GNUC__ == 4 && \ 804 (__GNUC_MINOR__ >= 3 || __GNUC_PATCHLEVEL__ >= 2))) && !defined(__GXX_RTTI) 805 # define _LIBCPP_NO_RTTI 806 # elif (defined(_MSC_VER) && !defined(__clang__)) && !defined(_CPPRTTI) 807 # define _LIBCPP_NO_RTTI 808 # endif 809 #endif 810 811 #ifndef _LIBCPP_WEAK 812 # define _LIBCPP_WEAK __attribute__((__weak__)) 813 #endif 814 815 // Thread API 816 #ifndef _LIBCPP_HAS_NO_THREADS 817 # if defined(__FreeBSD__) || \ 818 defined(__NetBSD__) || \ 819 defined(__linux__) || \ 820 defined(__APPLE__) || \ 821 defined(__CloudABI__) || \ 822 defined(__sun__) 823 # define _LIBCPP_THREAD_API_PTHREAD 824 # else 825 # error "No thread API" 826 # endif // _LIBCPP_THREAD_API 827 #endif // _LIBCPP_HAS_NO_THREADS 828 829 830 #if defined(_LIBCPP_HAS_NO_MONOTONIC_CLOCK) && !defined(_LIBCPP_HAS_NO_THREADS) 831 # error _LIBCPP_HAS_NO_MONOTONIC_CLOCK may only be defined when \ 832 _LIBCPP_HAS_NO_THREADS is defined. 833 #endif 834 835 // Systems that use capability-based security (FreeBSD with Capsicum, 836 // Nuxi CloudABI) may only provide local filesystem access (using *at()). 837 // Functions like open(), rename(), unlink() and stat() should not be 838 // used, as they attempt to access the global filesystem namespace. 839 #ifdef __CloudABI__ 840 #define _LIBCPP_HAS_NO_GLOBAL_FILESYSTEM_NAMESPACE 841 #endif 842 843 // CloudABI is intended for running networked services. Processes do not 844 // have standard input and output channels. 845 #ifdef __CloudABI__ 846 #define _LIBCPP_HAS_NO_STDIN 847 #define _LIBCPP_HAS_NO_STDOUT 848 #endif 849 850 #if defined(__ANDROID__) || defined(__CloudABI__) || defined(_LIBCPP_HAS_MUSL_LIBC) 851 #define _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE 852 #endif 853 854 // Thread-unsafe functions such as strtok(), mbtowc() and localtime() 855 // are not available. 856 #ifdef __CloudABI__ 857 #define _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS 858 #endif 859 860 #if __has_feature(cxx_atomic) || __has_extension(c_atomic) 861 #define _LIBCPP_HAS_C_ATOMIC_IMP 862 #elif _GNUC_VER > 407 863 #define _LIBCPP_HAS_GCC_ATOMIC_IMP 864 #endif 865 866 #if (!defined(_LIBCPP_HAS_C_ATOMIC_IMP) && !defined(_LIBCPP_HAS_GCC_ATOMIC_IMP)) \ 867 || defined(_LIBCPP_HAS_NO_THREADS) 868 #define _LIBCPP_HAS_NO_ATOMIC_HEADER 869 #endif 870 871 #ifndef _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK 872 #define _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK 873 #endif 874 875 #if __cplusplus < 201103L 876 #define _LIBCPP_CXX03_LANG 877 #else 878 #if defined(_LIBCPP_HAS_NO_VARIADIC_TEMPLATES) || defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) 879 #error Libc++ requires a feature complete C++11 compiler in C++11 or greater. 880 #endif 881 #endif 882 883 #if (defined(_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS) && defined(__clang__) \ 884 && __has_attribute(acquire_capability)) 885 #define _LIBCPP_HAS_THREAD_SAFETY_ANNOTATIONS 886 #endif 887 888 #endif // __cplusplus 889 890 #endif // _LIBCPP_CONFIG 891