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 #pragma GCC system_header
     16 #endif
     17 
     18 #ifdef __GNUC__
     19 #define _GNUC_VER (__GNUC__ * 100 + __GNUC_MINOR__)
     20 #endif
     21 
     22 #define _LIBCPP_VERSION 1101
     23 
     24 #define _LIBCPP_ABI_VERSION 1
     25 
     26 #define _LIBCPP_CONCAT1(_LIBCPP_X,_LIBCPP_Y) _LIBCPP_X##_LIBCPP_Y
     27 #define _LIBCPP_CONCAT(_LIBCPP_X,_LIBCPP_Y) _LIBCPP_CONCAT1(_LIBCPP_X,_LIBCPP_Y)
     28 
     29 #define _LIBCPP_NAMESPACE _LIBCPP_CONCAT(__ndk,_LIBCPP_ABI_VERSION)
     30 
     31 #ifdef __LITTLE_ENDIAN__
     32 #if __LITTLE_ENDIAN__
     33 #define _LIBCPP_LITTLE_ENDIAN 1
     34 #define _LIBCPP_BIG_ENDIAN    0
     35 #endif  // __LITTLE_ENDIAN__
     36 #endif  // __LITTLE_ENDIAN__
     37 
     38 #ifdef __BIG_ENDIAN__
     39 #if __BIG_ENDIAN__
     40 #define _LIBCPP_LITTLE_ENDIAN 0
     41 #define _LIBCPP_BIG_ENDIAN    1
     42 #endif  // __BIG_ENDIAN__
     43 #endif  // __BIG_ENDIAN__
     44 
     45 #ifdef __FreeBSD__
     46 # include <sys/endian.h>
     47 #  if _BYTE_ORDER == _LITTLE_ENDIAN
     48 #   define _LIBCPP_LITTLE_ENDIAN 1
     49 #   define _LIBCPP_BIG_ENDIAN    0
     50 # else  // _BYTE_ORDER == _LITTLE_ENDIAN
     51 #   define _LIBCPP_LITTLE_ENDIAN 0
     52 #   define _LIBCPP_BIG_ENDIAN    1
     53 # endif  // _BYTE_ORDER == _LITTLE_ENDIAN
     54 # ifndef __LONG_LONG_SUPPORTED
     55 #  define _LIBCPP_HAS_NO_LONG_LONG
     56 # endif  // __LONG_LONG_SUPPORTED
     57 #endif  // __FreeBSD__
     58 
     59 #ifdef __NetBSD__
     60 # include <sys/endian.h>
     61 #  if _BYTE_ORDER == _LITTLE_ENDIAN
     62 #   define _LIBCPP_LITTLE_ENDIAN 1
     63 #   define _LIBCPP_BIG_ENDIAN    0
     64 # else  // _BYTE_ORDER == _LITTLE_ENDIAN
     65 #   define _LIBCPP_LITTLE_ENDIAN 0
     66 #   define _LIBCPP_BIG_ENDIAN    1
     67 # endif  // _BYTE_ORDER == _LITTLE_ENDIAN
     68 # define _LIBCPP_HAS_QUICK_EXIT
     69 #endif  // __NetBSD__
     70 
     71 #ifdef _WIN32
     72 #  define _LIBCPP_LITTLE_ENDIAN 1
     73 #  define _LIBCPP_BIG_ENDIAN    0
     74 // Compiler intrinsics (GCC or MSVC)
     75 #  if defined(__clang__) \
     76    || (defined(_MSC_VER) && _MSC_VER >= 1400) \
     77    || (defined(__GNUC__) && _GNUC_VER > 403)
     78 #    define _LIBCPP_HAS_IS_BASE_OF
     79 #  endif
     80 #  if defined(_MSC_VER) && !defined(__clang__)
     81 #    define _LIBCPP_MSVC // Using Microsoft Visual C++ compiler
     82 #    define _LIBCPP_TOSTRING2(x) #x
     83 #    define _LIBCPP_TOSTRING(x) _LIBCPP_TOSTRING2(x)
     84 #    define _LIBCPP_WARNING(x) __pragma(message(__FILE__ "(" _LIBCPP_TOSTRING(__LINE__) ") : warning note: " x))
     85 #  endif
     86 #  // If mingw not explicitly detected, assume using MS C runtime only.
     87 #  ifndef __MINGW32__
     88 #    define _LIBCPP_MSVCRT // Using Microsoft's C Runtime library
     89 #  endif
     90 #endif  // _WIN32
     91 
     92 #ifdef __linux__
     93 #  if defined(__GNUC__) && _GNUC_VER >= 403
     94 #    define _LIBCPP_HAS_IS_BASE_OF
     95 #  endif
     96 #endif
     97 
     98 #ifdef __sun__
     99 # include <sys/isa_defs.h>
    100 # ifdef _LITTLE_ENDIAN
    101 #   define _LIBCPP_LITTLE_ENDIAN 1
    102 #   define _LIBCPP_BIG_ENDIAN    0
    103 # else
    104 #   define _LIBCPP_LITTLE_ENDIAN 0
    105 #   define _LIBCPP_BIG_ENDIAN    1
    106 # endif
    107 #endif // __sun__
    108 
    109 #if !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN)
    110 # include <endian.h>
    111 # if __BYTE_ORDER == __LITTLE_ENDIAN
    112 #  define _LIBCPP_LITTLE_ENDIAN 1
    113 #  define _LIBCPP_BIG_ENDIAN    0
    114 # elif __BYTE_ORDER == __BIG_ENDIAN
    115 #  define _LIBCPP_LITTLE_ENDIAN 0
    116 #  define _LIBCPP_BIG_ENDIAN    1
    117 # else  // __BYTE_ORDER == __BIG_ENDIAN
    118 #  error unable to determine endian
    119 # endif
    120 #endif  // !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN)
    121 
    122 #ifdef _WIN32
    123 
    124 // only really useful for a DLL
    125 #ifdef _LIBCPP_DLL // this should be a compiler builtin define ideally...
    126 # ifdef cxx_EXPORTS
    127 #  define _LIBCPP_HIDDEN
    128 #  define _LIBCPP_FUNC_VIS __declspec(dllexport)
    129 #  define _LIBCPP_TYPE_VIS __declspec(dllexport)
    130 # else
    131 #  define _LIBCPP_HIDDEN
    132 #  define _LIBCPP_FUNC_VIS __declspec(dllimport)
    133 #  define _LIBCPP_TYPE_VIS __declspec(dllimport)
    134 # endif
    135 #else
    136 # define _LIBCPP_HIDDEN
    137 # define _LIBCPP_FUNC_VIS
    138 # define _LIBCPP_TYPE_VIS
    139 #endif
    140 
    141 #define _LIBCPP_TYPE_VIS_ONLY
    142 #define _LIBCPP_FUNC_VIS_ONLY
    143 
    144 #ifndef _LIBCPP_INLINE_VISIBILITY
    145 # ifdef _LIBCPP_MSVC
    146 #  define _LIBCPP_INLINE_VISIBILITY __forceinline
    147 # else // MinGW GCC and Clang
    148 #  define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__always_inline__))
    149 # endif
    150 #endif
    151 
    152 #ifndef _LIBCPP_EXCEPTION_ABI
    153 #define _LIBCPP_EXCEPTION_ABI _LIBCPP_TYPE_VIS
    154 #endif
    155 
    156 #ifndef _LIBCPP_ALWAYS_INLINE
    157 # ifdef _LIBCPP_MSVC
    158 #  define _LIBCPP_ALWAYS_INLINE __forceinline
    159 # endif
    160 #endif
    161 
    162 #endif // _WIN32
    163 
    164 #ifndef __has_attribute
    165 #define __has_attribute(__x) 0
    166 #endif
    167 
    168 #ifndef _LIBCPP_HIDDEN
    169 #define _LIBCPP_HIDDEN __attribute__ ((__visibility__("hidden")))
    170 #endif
    171 
    172 #ifndef _LIBCPP_FUNC_VIS
    173 #define _LIBCPP_FUNC_VIS __attribute__ ((__visibility__("default")))
    174 #endif
    175 
    176 #ifndef _LIBCPP_TYPE_VIS
    177 #  if __has_attribute(__type_visibility__)
    178 #    define _LIBCPP_TYPE_VIS __attribute__ ((__type_visibility__("default")))
    179 #  else
    180 #    define _LIBCPP_TYPE_VIS __attribute__ ((__visibility__("default")))
    181 #  endif
    182 #endif
    183 
    184 #ifndef _LIBCPP_TYPE_VIS_ONLY
    185 # define _LIBCPP_TYPE_VIS_ONLY _LIBCPP_TYPE_VIS
    186 #endif
    187 
    188 #ifndef _LIBCPP_FUNC_VIS_ONLY
    189 # define _LIBCPP_FUNC_VIS_ONLY _LIBCPP_FUNC_VIS
    190 #endif
    191 
    192 #ifndef _LIBCPP_INLINE_VISIBILITY
    193 #define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__visibility__("hidden"), __always_inline__))
    194 #define _LIBCPP_INLINE_VISIBILITY_EXCEPT_GCC49 _LIBCPP_INLINE_VISIBILITY
    195 #endif
    196 
    197 #ifndef _LIBCPP_EXCEPTION_ABI
    198 #define _LIBCPP_EXCEPTION_ABI __attribute__ ((__visibility__("default")))
    199 #endif
    200 
    201 #ifndef _LIBCPP_ALWAYS_INLINE
    202 #define _LIBCPP_ALWAYS_INLINE  __attribute__ ((__visibility__("hidden"), __always_inline__))
    203 #define _LIBCPP_ALWAYS_INLINE_EXCEPT_GCC49 _LIBCPP_ALWAYS_INLINE
    204 #endif
    205 
    206 #if defined(__clang__)
    207 
    208 #if defined(__APPLE__) && !defined(__i386__) && !defined(__x86_64__) &&        \
    209     !defined(__arm__)
    210 #define _LIBCPP_ALTERNATE_STRING_LAYOUT
    211 #endif
    212 
    213 #if __has_feature(cxx_alignas)
    214 #  define _ALIGNAS_TYPE(x) alignas(x)
    215 #  define _ALIGNAS(x) alignas(x)
    216 #else
    217 #  define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x))))
    218 #  define _ALIGNAS(x) __attribute__((__aligned__(x)))
    219 #endif
    220 
    221 #if !__has_feature(cxx_alias_templates)
    222 #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES
    223 #endif
    224 
    225 #if __cplusplus < 201103L
    226 #ifdef __linux__
    227 #define _LIBCPP_HAS_NO_UNICODE_CHARS
    228 #else
    229 typedef __char16_t char16_t;
    230 typedef __char32_t char32_t;
    231 #endif
    232 #endif
    233 
    234 #if !(__has_feature(cxx_exceptions))
    235 #define _LIBCPP_NO_EXCEPTIONS
    236 #endif
    237 
    238 #if !(__has_feature(cxx_rtti))
    239 #define _LIBCPP_NO_RTTI
    240 #endif
    241 
    242 #if !(__has_feature(cxx_strong_enums))
    243 #define _LIBCPP_HAS_NO_STRONG_ENUMS
    244 #endif
    245 
    246 #if !(__has_feature(cxx_decltype))
    247 #define _LIBCPP_HAS_NO_DECLTYPE
    248 #endif
    249 
    250 #if __has_feature(cxx_attributes)
    251 #  define _LIBCPP_NORETURN [[noreturn]]
    252 #else
    253 #  define _LIBCPP_NORETURN __attribute__ ((noreturn))
    254 #endif
    255 
    256 #if !(__has_feature(cxx_defaulted_functions))
    257 #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
    258 #endif  // !(__has_feature(cxx_defaulted_functions))
    259 
    260 #if !(__has_feature(cxx_deleted_functions))
    261 #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
    262 #endif  // !(__has_feature(cxx_deleted_functions))
    263 
    264 #if !(__has_feature(cxx_lambdas))
    265 #define _LIBCPP_HAS_NO_LAMBDAS
    266 #endif
    267 
    268 #if !(__has_feature(cxx_nullptr))
    269 #define _LIBCPP_HAS_NO_NULLPTR
    270 #endif
    271 
    272 #if !(__has_feature(cxx_rvalue_references))
    273 #define _LIBCPP_HAS_NO_RVALUE_REFERENCES
    274 #endif
    275 
    276 #if !(__has_feature(cxx_static_assert))
    277 #define _LIBCPP_HAS_NO_STATIC_ASSERT
    278 #endif
    279 
    280 #if !(__has_feature(cxx_auto_type))
    281 #define _LIBCPP_HAS_NO_AUTO_TYPE
    282 #endif
    283 
    284 #if !(__has_feature(cxx_access_control_sfinae)) || !__has_feature(cxx_trailing_return)
    285 #define _LIBCPP_HAS_NO_ADVANCED_SFINAE
    286 #endif
    287 
    288 #if !(__has_feature(cxx_variadic_templates))
    289 #define _LIBCPP_HAS_NO_VARIADICS
    290 #endif
    291 
    292 #if !(__has_feature(cxx_trailing_return))
    293 #define _LIBCPP_HAS_NO_TRAILING_RETURN
    294 #endif
    295 
    296 #if !(__has_feature(cxx_generalized_initializers))
    297 #define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
    298 #endif
    299 
    300 #if __has_feature(is_base_of)
    301 #  define _LIBCPP_HAS_IS_BASE_OF
    302 #endif
    303 
    304 // Objective-C++ features (opt-in)
    305 #if __has_feature(objc_arc)
    306 #define _LIBCPP_HAS_OBJC_ARC
    307 #endif
    308 
    309 #if __has_feature(objc_arc_weak)
    310 #define _LIBCPP_HAS_OBJC_ARC_WEAK
    311 #define _LIBCPP_HAS_NO_STRONG_ENUMS
    312 #endif
    313 
    314 #if !(__has_feature(cxx_constexpr))
    315 #define _LIBCPP_HAS_NO_CONSTEXPR
    316 #endif
    317 
    318 #if __ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L
    319 #if defined(__FreeBSD__)
    320 #define _LIBCPP_HAS_QUICK_EXIT
    321 #define _LIBCPP_HAS_C11_FEATURES
    322 #elif defined(__linux__) && defined(__GLIBC__)
    323 #include <features.h>
    324 #if __GLIBC_PREREQ(2, 15)
    325 #define _LIBCPP_HAS_QUICK_EXIT
    326 #endif
    327 #if __GLIBC_PREREQ(2, 17)
    328 #define _LIBCPP_HAS_C11_FEATURES
    329 #endif
    330 #endif
    331 #endif
    332 
    333 #if (__has_feature(cxx_noexcept))
    334 #  define _NOEXCEPT noexcept
    335 #  define _NOEXCEPT_(x) noexcept(x)
    336 #  define _NOEXCEPT_OR_FALSE(x) noexcept(x)
    337 #else
    338 #  define _NOEXCEPT throw()
    339 #  define _NOEXCEPT_(x)
    340 #  define _NOEXCEPT_OR_FALSE(x) false
    341 #endif
    342 
    343 #if __has_feature(underlying_type)
    344 #  define _LIBCPP_UNDERLYING_TYPE(T) __underlying_type(T)
    345 #endif
    346 
    347 #if __has_feature(is_literal)
    348 #  define _LIBCPP_IS_LITERAL(T) __is_literal(T)
    349 #endif
    350 
    351 // Inline namespaces are available in Clang regardless of C++ dialect.
    352 #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE {
    353 #define _LIBCPP_END_NAMESPACE_STD  } }
    354 #define _VSTD std::_LIBCPP_NAMESPACE
    355 
    356 namespace std {
    357   inline namespace _LIBCPP_NAMESPACE {
    358   }
    359 }
    360 
    361 #if !defined(_LIBCPP_HAS_NO_ASAN) && !__has_feature(address_sanitizer)
    362 #define _LIBCPP_HAS_NO_ASAN
    363 #endif
    364 
    365 #elif defined(__GNUC__)
    366 
    367 // FixME: GCC4.9 fails some always_inline cases
    368 # if (_GNUC_VER == 409)
    369 #undef _LIBCPP_ALWAYS_INLINE_EXCEPT_GCC49
    370 #define _LIBCPP_ALWAYS_INLINE_EXCEPT_GCC49 inline
    371 #undef _LIBCPP_INLINE_VISIBILITY_EXCEPT_GCC49
    372 #define _LIBCPP_INLINE_VISIBILITY_EXCEPT_GCC49
    373 #endif
    374 
    375 #define _ALIGNAS(x) __attribute__((__aligned__(x)))
    376 #define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x))))
    377 
    378 #define _LIBCPP_NORETURN __attribute__((noreturn))
    379 
    380 #if _GNUC_VER >= 407
    381 #define _LIBCPP_UNDERLYING_TYPE(T) __underlying_type(T)
    382 #define _LIBCPP_IS_LITERAL(T) __is_literal_type(T)
    383 #endif
    384 
    385 #if !__EXCEPTIONS
    386 #define _LIBCPP_NO_EXCEPTIONS
    387 #endif
    388 
    389 #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES
    390 
    391 // constexpr was added to GCC in 4.6
    392 #if _GNUC_VER < 406
    393 #define _LIBCPP_HAS_NO_CONSTEXPR
    394 // Can only use constexpr in c++11 mode.
    395 #elif !defined(__GXX_EXPERIMENTAL_CXX0X__) && __cplusplus < 201103L
    396 #define _LIBCPP_HAS_NO_CONSTEXPR
    397 #endif
    398 
    399 #define _NOEXCEPT throw()
    400 #define _NOEXCEPT_(x)
    401 #define _NOEXCEPT_OR_FALSE(x) false
    402 
    403 #ifndef __GXX_EXPERIMENTAL_CXX0X__
    404 
    405 #define _LIBCPP_HAS_NO_ADVANCED_SFINAE
    406 #define _LIBCPP_HAS_NO_DECLTYPE
    407 #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
    408 #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
    409 #define _LIBCPP_HAS_NO_NULLPTR
    410 #define _LIBCPP_HAS_NO_STATIC_ASSERT
    411 #define _LIBCPP_HAS_NO_UNICODE_CHARS
    412 #define _LIBCPP_HAS_NO_VARIADICS
    413 #define _LIBCPP_HAS_NO_RVALUE_REFERENCES
    414 #define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS
    415 #define _LIBCPP_HAS_NO_STRONG_ENUMS
    416 
    417 #else  // __GXX_EXPERIMENTAL_CXX0X__
    418 
    419 #define _LIBCPP_HAS_NO_TRAILING_RETURN
    420 #define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS
    421 
    422 #if _GNUC_VER < 403
    423 #define _LIBCPP_HAS_NO_RVALUE_REFERENCES
    424 #endif
    425 
    426 #if _GNUC_VER < 403
    427 #define _LIBCPP_HAS_NO_STATIC_ASSERT
    428 #endif
    429 
    430 #if _GNUC_VER < 404
    431 #define _LIBCPP_HAS_NO_DECLTYPE
    432 #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
    433 #define _LIBCPP_HAS_NO_UNICODE_CHARS
    434 #define _LIBCPP_HAS_NO_VARIADICS
    435 #define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
    436 #endif  // _GNUC_VER < 404
    437 
    438 #if _GNUC_VER < 406
    439 #define _LIBCPP_HAS_NO_NULLPTR
    440 #endif
    441 
    442 #if _GNUC_VER < 407
    443 #define _LIBCPP_HAS_NO_ADVANCED_SFINAE
    444 #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
    445 #endif
    446 
    447 #endif  // __GXX_EXPERIMENTAL_CXX0X__
    448 
    449 #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { namespace _LIBCPP_NAMESPACE {
    450 #define _LIBCPP_END_NAMESPACE_STD  } }
    451 #define _VSTD std::_LIBCPP_NAMESPACE
    452 
    453 namespace std {
    454 namespace _LIBCPP_NAMESPACE {
    455 }
    456 using namespace _LIBCPP_NAMESPACE __attribute__((__strong__));
    457 }
    458 
    459 #if !defined(_LIBCPP_HAS_NO_ASAN) && !defined(__SANITIZE_ADDRESS__)
    460 #define _LIBCPP_HAS_NO_ASAN
    461 #endif
    462 
    463 // Emulation of clang's __has_feature() for GCC on known cases
    464 #undef __has_feature
    465 #define __has_feature(__x) __gxx__ ## __x
    466 
    467 #define __gxx__cxx_access_control_sfinae          !defined(_LIBCPP_HAS_NO_TRAILING_RETURN) || !defined(_LIBCPP_HAS_NO_ADVANCED_SFINAE) // Also see usage in 7 tests
    468 #define __gxx__cxx_alias_templates                !defined(_LIBCPP_HAS_NO_TEMPLATE_ALIASES)
    469 #define __gxx__cxx_address_sanitizer              !defined(_LIBCPP_HAS_NO_ASAN)
    470 #define __gxx__cxx_alignas                        0  // Not sure, doesn't matter.
    471 #define __gxx__cxx_atomic                         (_GNUC_VER >= 407)
    472 #define __gxx__cxx_attributes                     0  // Not sure. Also see usage in libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_polymorphic.pass.cpp
    473 #define __gxx__cxx_auto_type                      !defined(_LIBCPP_HAS_NO_AUTO_TYPE)
    474 #define __gxx__cxx_constexpr                      !defined(_LIBCPP_HAS_NO_CONSTEXPR)
    475 #define __gxx__cxx_decltype                       !defined(_LIBCPP_HAS_NO_DECLTYPE)
    476 #define __gxx__cxx_defaulted_functions            !defined(_LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS)  // libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_constructible.pass.cpp
    477 #define __gxx__cxx_deleted_functions              !defined(_LIBCPP_HAS_NO_DELETED_FUNCTIONS)
    478 #define __gxx__cxx_exceptions                     !defined(_LIBCPP_NO_EXCEPTIONS)
    479 #define __gxx__cxx_explicit_conversions           (_GNUC_VER >= 405)
    480 #define __gxx__cxx_generalized_initializers       !defined(_LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS)
    481 #define __gxx__cxx_lambdas                        !defined(_LIBCPP_HAS_NO_LAMBDAS)
    482 #define __gxx__cxx_noexcept                       0  // Not sure, doesn't matter.
    483 #define __gxx__cxx_nullptr                        !defined(_LIBCPP_HAS_NO_NULLPTR)
    484 #define __gxx__cxx_reference_qualified_functions  (_GNUC_VER >= 408)  // Since 4.8.1
    485 #ifdef _LIBCPP_NO_RTTI
    486 #define __gxx__cxx_rtti                           0
    487 #else
    488 #define __gxx__cxx_rtti                           __GXX_RTTI
    489 #endif
    490 #define __gxx__cxx_rvalue_references              !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES)
    491 #define __gxx__cxx_static_assert                  !defined(_LIBCPP_HAS_NO_STATIC_ASSERT)
    492 #define __gxx__cxx_strong_enums                   !defined(_LIBCPP_HAS_NO_STRONG_ENUMS)  // See usage in libcxx/test/utilities/meta/meta.trans/meta.trans.other/underlying_type.pass.cpp
    493 #define __gxx__cxx_trailing_return                !defined(_LIBCPP_HAS_NO_TRAILING_RETURN)
    494 #define __gxx__cxx_unrestricted_unions            1  // Not sure.  Also See usage in libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_destructible.pass.cpp
    495 #define __gxx__cxx_variadic_templates             !defined(_LIBCPP_HAS_NO_VARIADICS)
    496 #define __gxx__has_nothrow_assign                 (_GNUC_VER >= 403)  // See usage in libcxx/include/type_traits
    497 #define __gxx__has_nothrow_constructor            (_GNUC_VER >= 403)  // See usage in libcxx/include/type_traits
    498 #define __gxx__has_nothrow_copy                   (_GNUC_VER >= 403)  // See usage in libcxx/include/type_traits
    499 #define __gxx__has_trivial_constructor            (_GNUC_VER >= 403)  // See usage in libcxx/include/type_traits
    500 #define __gxx__has_trivial_destructor             (_GNUC_VER >= 403)  // See usage in libcxx/include/type_traits
    501 #define __gxx__has_virtual_destructor             (_GNUC_VER >= 403)  // See usage in libcxx/include/type_traits
    502 #define __gxx__is_base_of                         !defined(_LIBCPP_HAS_IS_BASE_OF)  // See usage in libcxx/include/type_traits
    503 #define __gxx__is_class                           (_GNUC_VER >= 403)  // See usage in libcxx/include/type_traits
    504 #define __gxx__is_convertible_to                  0  // Not supported in GCC 4.8.  Also see usage in libcxx/include/type_traits
    505 #define __gxx__is_empty                           1  // Not sure.  Also see usage in libcxx/include/type_traits
    506 #define __gxx__is_enum                            (_GNUC_VER >= 403)  // See usage in libcxx/include/type_traits
    507 #define __gxx__is_final                           (_GNUC_VER >= 408)  // Not if 4.7 work. 4.6 certainly not.  Also see usage in libcxx/include/unordered_map,tuple,ext/hash_map,map,memory
    508 #define __gxx__is_literal                         defined(_LIBCPP_IS_LITERAL)
    509 #define __gxx__is_pod                             (_GNUC_VER >= 403)  // See usage in libcxx/include/type_traits
    510 #define __gxx__is_polymorphic                     1  // Not sure.  Also see usage in libcxx/include/type_traits
    511 #define __gxx__is_standard_layout                 1  // Not sure.  Also see usage in libcxx/include/type_traits
    512 #define __gxx__is_trivial                         0  // Not supported in GCC 4.8.  Also see usage in libcxx/include/type_traits
    513 #define __gxx__is_trivially_constructible         0  // Not supported in GCC 4.8.  Also see usage in libcxx/include/type_traits
    514 #define __gxx__is_trivially_copyable              0  // Not supported in GCC 4.8.  Also see usage in libcxx/include/type_traits
    515 #define __gxx__is_union                           (_GNUC_VER >= 403)  // See usage in libcxx/include/type_traits
    516 #define __gxx__objc_arc                           defined(_LIBCPP_HAS_OBJC_ARC)
    517 #define __gxx__objc_arc_weak                      defined(_LIBCPP_HAS_OBJC_ARC_WEAK)
    518 #define __gxx__underlying_type                    defined(_LIBCPP_UNDERLYING_TYPE)
    519 
    520 
    521 #elif defined(_LIBCPP_MSVC)
    522 
    523 #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES
    524 #define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
    525 #define _LIBCPP_HAS_NO_CONSTEXPR
    526 #define _LIBCPP_HAS_NO_UNICODE_CHARS
    527 #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
    528 #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
    529 #define __alignof__ __alignof
    530 #define _LIBCPP_NORETURN __declspec(noreturn)
    531 #define _ALIGNAS(x) __declspec(align(x))
    532 #define _LIBCPP_HAS_NO_VARIADICS
    533 
    534 #define _NOEXCEPT throw ()
    535 #define _NOEXCEPT_(x)
    536 #define _NOEXCEPT_OR_FALSE(x) false
    537 
    538 #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {
    539 #define _LIBCPP_END_NAMESPACE_STD  }
    540 #define _VSTD std
    541 
    542 #  define _LIBCPP_WEAK
    543 namespace std {
    544 }
    545 
    546 #define _LIBCPP_HAS_NO_ASAN
    547 
    548 #elif defined(__IBMCPP__)
    549 
    550 #define _ALIGNAS(x) __attribute__((__aligned__(x)))
    551 #define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x))))
    552 #define _ATTRIBUTE(x) __attribute__((x))
    553 #define _LIBCPP_NORETURN __attribute__((noreturn))
    554 
    555 #define _NOEXCEPT throw()
    556 #define _NOEXCEPT_(x)
    557 #define _NOEXCEPT_OR_FALSE(x) false
    558 
    559 #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES
    560 #define _LIBCPP_HAS_NO_ADVANCED_SFINAE
    561 #define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS
    562 #define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
    563 #define _LIBCPP_HAS_NO_NULLPTR
    564 #define _LIBCPP_HAS_NO_UNICODE_CHARS
    565 #define _LIBCPP_HAS_IS_BASE_OF
    566 
    567 #if defined(_AIX)
    568 #define __MULTILOCALE_API
    569 #endif
    570 
    571 #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE {
    572 #define _LIBCPP_END_NAMESPACE_STD  } }
    573 #define _VSTD std::_LIBCPP_NAMESPACE
    574 
    575 namespace std {
    576   inline namespace _LIBCPP_NAMESPACE {
    577   }
    578 }
    579 
    580 #define _LIBCPP_HAS_NO_ASAN
    581 
    582 #endif // __clang__ || __GNUC__ || _MSC_VER || __IBMCPP__
    583 
    584 #ifdef _LIBCPP_HAS_NO_UNICODE_CHARS
    585 typedef unsigned short char16_t;
    586 typedef unsigned int   char32_t;
    587 #endif  // _LIBCPP_HAS_NO_UNICODE_CHARS
    588 
    589 #ifndef __SIZEOF_INT128__
    590 #define _LIBCPP_HAS_NO_INT128
    591 #endif
    592 
    593 #ifdef _LIBCPP_HAS_NO_STATIC_ASSERT
    594 
    595 template <bool> struct __static_assert_test;
    596 template <> struct __static_assert_test<true> {};
    597 template <unsigned> struct __static_assert_check {};
    598 #define static_assert(__b, __m) \
    599     typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
    600     _LIBCPP_CONCAT(__t, __LINE__)
    601 
    602 #endif  // _LIBCPP_HAS_NO_STATIC_ASSERT
    603 
    604 #ifdef _LIBCPP_HAS_NO_DECLTYPE
    605 #define decltype(x) __typeof__(x)
    606 #endif
    607 
    608 #ifdef _LIBCPP_HAS_NO_CONSTEXPR
    609 #define _LIBCPP_CONSTEXPR
    610 #else
    611 #define _LIBCPP_CONSTEXPR constexpr
    612 #endif
    613 
    614 #ifdef _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
    615 #define _LIBCPP_DEFAULT {}
    616 #else
    617 #define _LIBCPP_DEFAULT = default;
    618 #endif
    619 
    620 #ifdef __GNUC__
    621 #define _NOALIAS __attribute__((__malloc__))
    622 #else
    623 #define _NOALIAS
    624 #endif
    625 
    626 #ifndef __has_feature
    627 #define __has_feature(__x) 0
    628 #endif
    629 
    630 #if __has_feature(cxx_explicit_conversions) || defined(__IBMCPP__)
    631 #   define _LIBCPP_EXPLICIT explicit
    632 #else
    633 #   define _LIBCPP_EXPLICIT
    634 #endif
    635 
    636 #ifdef _LIBCPP_HAS_NO_STRONG_ENUMS
    637 #define _LIBCPP_DECLARE_STRONG_ENUM(x) struct _LIBCPP_TYPE_VIS x { enum __lx
    638 #define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) \
    639     __lx __v_; \
    640     _LIBCPP_ALWAYS_INLINE x(__lx __v) : __v_(__v) {} \
    641     _LIBCPP_ALWAYS_INLINE explicit x(int __v) : __v_(static_cast<__lx>(__v)) {} \
    642     _LIBCPP_ALWAYS_INLINE operator int() const {return __v_;} \
    643     };
    644 #else  // _LIBCPP_HAS_NO_STRONG_ENUMS
    645 #define _LIBCPP_DECLARE_STRONG_ENUM(x) enum class _LIBCPP_TYPE_VIS x
    646 #define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x)
    647 #endif  // _LIBCPP_HAS_NO_STRONG_ENUMS
    648 
    649 #ifdef _LIBCPP_DEBUG
    650 #   if _LIBCPP_DEBUG == 0
    651 #       define _LIBCPP_DEBUG_LEVEL 1
    652 #   elif _LIBCPP_DEBUG == 1
    653 #       define _LIBCPP_DEBUG_LEVEL 2
    654 #   else
    655 #       error Supported values for _LIBCPP_DEBUG are 0 and 1
    656 #   endif
    657 #   define _LIBCPP_EXTERN_TEMPLATE(...)
    658 #endif
    659 
    660 #ifndef _LIBCPP_EXTERN_TEMPLATE
    661 #define _LIBCPP_EXTERN_TEMPLATE(...)
    662 #endif
    663 
    664 #ifndef _LIBCPP_EXTERN_TEMPLATE2
    665 #define _LIBCPP_EXTERN_TEMPLATE2(...) extern template __VA_ARGS__;
    666 #endif
    667 
    668 #if defined(__APPLE__) && defined(__LP64__) && !defined(__x86_64__)
    669 #define _LIBCPP_NONUNIQUE_RTTI_BIT (1ULL << 63)
    670 #endif
    671 
    672 #if defined(__APPLE__) || defined(__FreeBSD__) || defined(_WIN32) || defined(__sun__) || defined(__NetBSD__)
    673 #define _LIBCPP_LOCALE__L_EXTENSIONS 1
    674 #endif
    675 
    676 #ifdef __FreeBSD__
    677 #define _DECLARE_C99_LDBL_MATH 1
    678 #endif
    679 
    680 #if defined(__APPLE__) || defined(__FreeBSD__)
    681 #define _LIBCPP_HAS_DEFAULTRUNELOCALE
    682 #endif
    683 
    684 #if defined(__APPLE__) || defined(__FreeBSD__) || defined(__sun__)
    685 #define _LIBCPP_WCTYPE_IS_MASK
    686 #endif
    687 
    688 #ifndef _LIBCPP_TRIVIAL_PAIR_COPY_CTOR
    689 #  define _LIBCPP_TRIVIAL_PAIR_COPY_CTOR 1
    690 #endif
    691 
    692 #ifndef _LIBCPP_STD_VER
    693 #  if  __cplusplus <= 201103L
    694 #    define _LIBCPP_STD_VER 11
    695 #  else
    696 #    define _LIBCPP_STD_VER 13  // current year, or date of c++14 ratification
    697 #  endif
    698 #endif  // _LIBCPP_STD_VER
    699 
    700 #if _LIBCPP_STD_VER > 11
    701 #define _LIBCPP_DEPRECATED [[deprecated]]
    702 #else
    703 #define _LIBCPP_DEPRECATED
    704 #endif
    705 
    706 #if _LIBCPP_STD_VER <= 11
    707 #define _LIBCPP_CONSTEXPR_AFTER_CXX11
    708 #define _LIBCPP_EXPLICIT_AFTER_CXX11
    709 #define _LIBCPP_DEPRECATED_AFTER_CXX11
    710 #else
    711 #define _LIBCPP_CONSTEXPR_AFTER_CXX11 constexpr
    712 #define _LIBCPP_EXPLICIT_AFTER_CXX11 explicit
    713 #define _LIBCPP_DEPRECATED_AFTER_CXX11 [[deprecated]]
    714 #endif
    715 
    716 #ifndef _LIBCPP_HAS_NO_ASAN
    717 extern "C" void __sanitizer_annotate_contiguous_container(
    718   const void *, const void *, const void *, const void *);
    719 #endif
    720 
    721 // Try to find out if RTTI is disabled.
    722 // g++ and cl.exe have RTTI on by default and define a macro when it is.
    723 // g++ only defines the macro in 4.3.2 and onwards.
    724 #if !defined(_LIBCPP_NO_RTTI)
    725 #  if defined(__GNUG__) && ((__GNUC__ >= 5 ) || (__GNUC__ == 4 && \
    726    (__GNUC_MINOR__ >= 3 || __GNUC_PATCHLEVEL__ >= 2))) && !defined(__GXX_RTTI)
    727 #    define _LIBCPP_NO_RTTI
    728 #  elif (defined(_MSC_VER) && !defined(__clang__)) && !defined(_CPPRTTI)
    729 #    define _LIBCPP_NO_RTTI
    730 #  endif
    731 #endif
    732 
    733 #ifndef _LIBCPP_WEAK
    734 #  define _LIBCPP_WEAK __attribute__((__weak__))
    735 #endif
    736 
    737 #endif  // _LIBCPP_CONFIG
    738