Home | History | Annotate | Download | only in include
      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