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(__,_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 #endif
    195 
    196 #ifndef _LIBCPP_EXCEPTION_ABI
    197 #define _LIBCPP_EXCEPTION_ABI __attribute__ ((__visibility__("default")))
    198 #endif
    199 
    200 #ifndef _LIBCPP_ALWAYS_INLINE
    201 #define _LIBCPP_ALWAYS_INLINE  __attribute__ ((__visibility__("hidden"), __always_inline__))
    202 #endif
    203 
    204 #if defined(__clang__)
    205 
    206 #if defined(__APPLE__) && !defined(__i386__) && !defined(__x86_64__) &&        \
    207     !defined(__arm__)
    208 #define _LIBCPP_ALTERNATE_STRING_LAYOUT
    209 #endif
    210 
    211 #if __has_feature(cxx_alignas)
    212 #  define _ALIGNAS_TYPE(x) alignas(x)
    213 #  define _ALIGNAS(x) alignas(x)
    214 #else
    215 #  define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x))))
    216 #  define _ALIGNAS(x) __attribute__((__aligned__(x)))
    217 #endif
    218 
    219 #if !__has_feature(cxx_alias_templates)
    220 #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES
    221 #endif
    222 
    223 #if __cplusplus < 201103L
    224 #ifdef __linux__
    225 #define _LIBCPP_HAS_NO_UNICODE_CHARS
    226 #else
    227 typedef __char16_t char16_t;
    228 typedef __char32_t char32_t;
    229 #endif
    230 #endif
    231 
    232 #if !(__has_feature(cxx_exceptions))
    233 #define _LIBCPP_NO_EXCEPTIONS
    234 #endif
    235 
    236 #if !(__has_feature(cxx_rtti))
    237 #define _LIBCPP_NO_RTTI
    238 #endif
    239 
    240 #if !(__has_feature(cxx_strong_enums))
    241 #define _LIBCPP_HAS_NO_STRONG_ENUMS
    242 #endif
    243 
    244 #if !(__has_feature(cxx_decltype))
    245 #define _LIBCPP_HAS_NO_DECLTYPE
    246 #endif
    247 
    248 #if __has_feature(cxx_attributes)
    249 #  define _LIBCPP_NORETURN [[noreturn]]
    250 #else
    251 #  define _LIBCPP_NORETURN __attribute__ ((noreturn))
    252 #endif
    253 
    254 #if !(__has_feature(cxx_defaulted_functions))
    255 #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
    256 #endif  // !(__has_feature(cxx_defaulted_functions))
    257 
    258 #if !(__has_feature(cxx_deleted_functions))
    259 #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
    260 #endif  // !(__has_feature(cxx_deleted_functions))
    261 
    262 #if !(__has_feature(cxx_lambdas))
    263 #define _LIBCPP_HAS_NO_LAMBDAS
    264 #endif
    265 
    266 #if !(__has_feature(cxx_nullptr))
    267 #define _LIBCPP_HAS_NO_NULLPTR
    268 #endif
    269 
    270 #if !(__has_feature(cxx_rvalue_references))
    271 #define _LIBCPP_HAS_NO_RVALUE_REFERENCES
    272 #endif
    273 
    274 #if !(__has_feature(cxx_static_assert))
    275 #define _LIBCPP_HAS_NO_STATIC_ASSERT
    276 #endif
    277 
    278 #if !(__has_feature(cxx_auto_type))
    279 #define _LIBCPP_HAS_NO_AUTO_TYPE
    280 #endif
    281 
    282 #if !(__has_feature(cxx_access_control_sfinae)) || !__has_feature(cxx_trailing_return)
    283 #define _LIBCPP_HAS_NO_ADVANCED_SFINAE
    284 #endif
    285 
    286 #if !(__has_feature(cxx_variadic_templates))
    287 #define _LIBCPP_HAS_NO_VARIADICS
    288 #endif
    289 
    290 #if !(__has_feature(cxx_trailing_return))
    291 #define _LIBCPP_HAS_NO_TRAILING_RETURN
    292 #endif
    293 
    294 #if !(__has_feature(cxx_generalized_initializers))
    295 #define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
    296 #endif
    297 
    298 #if __has_feature(is_base_of)
    299 #  define _LIBCPP_HAS_IS_BASE_OF
    300 #endif
    301 
    302 // Objective-C++ features (opt-in)
    303 #if __has_feature(objc_arc)
    304 #define _LIBCPP_HAS_OBJC_ARC
    305 #endif
    306 
    307 #if __has_feature(objc_arc_weak)
    308 #define _LIBCPP_HAS_OBJC_ARC_WEAK
    309 #define _LIBCPP_HAS_NO_STRONG_ENUMS
    310 #endif
    311 
    312 #if !(__has_feature(cxx_constexpr))
    313 #define _LIBCPP_HAS_NO_CONSTEXPR
    314 #endif
    315 
    316 #if __ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L
    317 #if defined(__FreeBSD__)
    318 #define _LIBCPP_HAS_QUICK_EXIT
    319 #define _LIBCPP_HAS_C11_FEATURES
    320 #elif defined(__ANDROID__)
    321 #define _LIBCPP_HAS_QUICK_EXIT
    322 #elif defined(__linux__)
    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 _LIBCXX_UNDERLYING_TYPE(T) __underlying_type(T)
    345 #endif
    346 
    347 // Inline namespaces are available in Clang regardless of C++ dialect.
    348 #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE {
    349 #define _LIBCPP_END_NAMESPACE_STD  } }
    350 #define _VSTD std::_LIBCPP_NAMESPACE
    351 
    352 namespace std {
    353   inline namespace _LIBCPP_NAMESPACE {
    354   }
    355 }
    356 
    357 #elif defined(__GNUC__)
    358 
    359 #define _ALIGNAS(x) __attribute__((__aligned__(x)))
    360 #define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x))))
    361 
    362 #define _LIBCPP_NORETURN __attribute__((noreturn))
    363 
    364 #if !__EXCEPTIONS
    365 #define _LIBCPP_NO_EXCEPTIONS
    366 #endif
    367 
    368 #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES
    369 #define _LIBCPP_HAS_NO_CONSTEXPR
    370 
    371 #define _NOEXCEPT throw()
    372 #define _NOEXCEPT_(x)
    373 #define _NOEXCEPT_OR_FALSE(x) false
    374 
    375 #ifndef __GXX_EXPERIMENTAL_CXX0X__
    376 
    377 #define _LIBCPP_HAS_NO_ADVANCED_SFINAE
    378 #define _LIBCPP_HAS_NO_DECLTYPE
    379 #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
    380 #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
    381 #define _LIBCPP_HAS_NO_NULLPTR
    382 #define _LIBCPP_HAS_NO_STATIC_ASSERT
    383 #define _LIBCPP_HAS_NO_UNICODE_CHARS
    384 #define _LIBCPP_HAS_NO_VARIADICS
    385 #define _LIBCPP_HAS_NO_RVALUE_REFERENCES
    386 #define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS
    387 #define _LIBCPP_HAS_NO_STRONG_ENUMS
    388 
    389 #else  // __GXX_EXPERIMENTAL_CXX0X__
    390 
    391 #define _LIBCPP_HAS_NO_TRAILING_RETURN
    392 #define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS
    393 
    394 #if _GNUC_VER < 403
    395 #define _LIBCPP_HAS_NO_RVALUE_REFERENCES
    396 #endif
    397 
    398 #if _GNUC_VER < 403
    399 #define _LIBCPP_HAS_NO_STATIC_ASSERT
    400 #endif
    401 
    402 #if _GNUC_VER < 404
    403 #define _LIBCPP_HAS_NO_DECLTYPE
    404 #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
    405 #define _LIBCPP_HAS_NO_UNICODE_CHARS
    406 #define _LIBCPP_HAS_NO_VARIADICS
    407 #define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
    408 #endif  // _GNUC_VER < 404
    409 
    410 #if _GNUC_VER < 406
    411 #define _LIBCPP_HAS_NO_NULLPTR
    412 #endif
    413 
    414 #if _GNUC_VER < 407
    415 #define _LIBCPP_HAS_NO_ADVANCED_SFINAE
    416 #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
    417 #endif
    418 
    419 #endif  // __GXX_EXPERIMENTAL_CXX0X__
    420 
    421 #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { namespace _LIBCPP_NAMESPACE {
    422 #define _LIBCPP_END_NAMESPACE_STD  } }
    423 #define _VSTD std::_LIBCPP_NAMESPACE
    424 
    425 namespace std {
    426 namespace _LIBCPP_NAMESPACE {
    427 }
    428 using namespace _LIBCPP_NAMESPACE __attribute__((__strong__));
    429 }
    430 
    431 #elif defined(_LIBCPP_MSVC)
    432 
    433 #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES
    434 #define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
    435 #define _LIBCPP_HAS_NO_CONSTEXPR
    436 #define _LIBCPP_HAS_NO_UNICODE_CHARS
    437 #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
    438 #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
    439 #define __alignof__ __alignof
    440 #define _LIBCPP_NORETURN __declspec(noreturn)
    441 #define _ALIGNAS(x) __declspec(align(x))
    442 #define _LIBCPP_HAS_NO_VARIADICS
    443 
    444 #define _NOEXCEPT throw ()
    445 #define _NOEXCEPT_(x)
    446 #define _NOEXCEPT_OR_FALSE(x) false
    447 
    448 #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {
    449 #define _LIBCPP_END_NAMESPACE_STD  }
    450 #define _VSTD std
    451 
    452 #  define _LIBCPP_WEAK
    453 namespace std {
    454 }
    455 
    456 #elif defined(__IBMCPP__)
    457 
    458 #define _ALIGNAS(x) __attribute__((__aligned__(x)))
    459 #define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x))))
    460 #define _ATTRIBUTE(x) __attribute__((x))
    461 #define _LIBCPP_NORETURN __attribute__((noreturn))
    462 
    463 #define _NOEXCEPT throw()
    464 #define _NOEXCEPT_(x)
    465 #define _NOEXCEPT_OR_FALSE(x) false
    466 
    467 #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES
    468 #define _LIBCPP_HAS_NO_ADVANCED_SFINAE
    469 #define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS
    470 #define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
    471 #define _LIBCPP_HAS_NO_NULLPTR
    472 #define _LIBCPP_HAS_NO_UNICODE_CHARS
    473 #define _LIBCPP_HAS_IS_BASE_OF
    474 
    475 #if defined(_AIX)
    476 #define __MULTILOCALE_API
    477 #endif
    478 
    479 #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE {
    480 #define _LIBCPP_END_NAMESPACE_STD  } }
    481 #define _VSTD std::_LIBCPP_NAMESPACE
    482 
    483 namespace std {
    484   inline namespace _LIBCPP_NAMESPACE {
    485   }
    486 }
    487 
    488 #endif // __clang__ || __GNUC__ || _MSC_VER || __IBMCPP__
    489 
    490 #ifdef _LIBCPP_HAS_NO_UNICODE_CHARS
    491 typedef unsigned short char16_t;
    492 typedef unsigned int   char32_t;
    493 #endif  // _LIBCPP_HAS_NO_UNICODE_CHARS
    494 
    495 #ifndef __SIZEOF_INT128__
    496 #define _LIBCPP_HAS_NO_INT128
    497 #endif
    498 
    499 #ifdef _LIBCPP_HAS_NO_STATIC_ASSERT
    500 
    501 template <bool> struct __static_assert_test;
    502 template <> struct __static_assert_test<true> {};
    503 template <unsigned> struct __static_assert_check {};
    504 #define static_assert(__b, __m) \
    505     typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
    506     _LIBCPP_CONCAT(__t, __LINE__)
    507 
    508 #endif  // _LIBCPP_HAS_NO_STATIC_ASSERT
    509 
    510 #ifdef _LIBCPP_HAS_NO_DECLTYPE
    511 #define decltype(x) __typeof__(x)
    512 #endif
    513 
    514 #ifdef _LIBCPP_HAS_NO_CONSTEXPR
    515 #define _LIBCPP_CONSTEXPR
    516 #else
    517 #define _LIBCPP_CONSTEXPR constexpr
    518 #endif
    519 
    520 #ifdef _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
    521 #define _LIBCPP_DEFAULT {}
    522 #else
    523 #define _LIBCPP_DEFAULT = default;
    524 #endif
    525 
    526 #ifdef __GNUC__
    527 #define _NOALIAS __attribute__((__malloc__))
    528 #else
    529 #define _NOALIAS
    530 #endif
    531 
    532 #ifndef __has_feature
    533 #define __has_feature(__x) 0
    534 #endif
    535 
    536 #if __has_feature(cxx_explicit_conversions) || defined(__IBMCPP__)
    537 #   define _LIBCPP_EXPLICIT explicit
    538 #else
    539 #   define _LIBCPP_EXPLICIT
    540 #endif
    541 
    542 #ifdef _LIBCPP_HAS_NO_STRONG_ENUMS
    543 #define _LIBCPP_DECLARE_STRONG_ENUM(x) struct _LIBCPP_TYPE_VIS x { enum __lx
    544 #define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) \
    545     __lx __v_; \
    546     _LIBCPP_ALWAYS_INLINE x(__lx __v) : __v_(__v) {} \
    547     _LIBCPP_ALWAYS_INLINE explicit x(int __v) : __v_(static_cast<__lx>(__v)) {} \
    548     _LIBCPP_ALWAYS_INLINE operator int() const {return __v_;} \
    549     };
    550 #else  // _LIBCPP_HAS_NO_STRONG_ENUMS
    551 #define _LIBCPP_DECLARE_STRONG_ENUM(x) enum class _LIBCPP_TYPE_VIS x
    552 #define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x)
    553 #endif  // _LIBCPP_HAS_NO_STRONG_ENUMS
    554 
    555 #ifdef _LIBCPP_DEBUG
    556 #   if _LIBCPP_DEBUG == 0
    557 #       define _LIBCPP_DEBUG_LEVEL 1
    558 #   elif _LIBCPP_DEBUG == 1
    559 #       define _LIBCPP_DEBUG_LEVEL 2
    560 #   else
    561 #       error Supported values for _LIBCPP_DEBUG are 0 and 1
    562 #   endif
    563 #   define _LIBCPP_EXTERN_TEMPLATE(...)
    564 #endif
    565 
    566 #ifndef _LIBCPP_EXTERN_TEMPLATE
    567 #define _LIBCPP_EXTERN_TEMPLATE(...)
    568 #endif
    569 
    570 #ifndef _LIBCPP_EXTERN_TEMPLATE2
    571 #define _LIBCPP_EXTERN_TEMPLATE2(...) extern template __VA_ARGS__;
    572 #endif
    573 
    574 #if defined(__APPLE__) && defined(__LP64__) && !defined(__x86_64__)
    575 #define _LIBCPP_NONUNIQUE_RTTI_BIT (1ULL << 63)
    576 #endif
    577 
    578 #if defined(__APPLE__) || defined(__FreeBSD__) || defined(_WIN32) || defined(__sun__) || defined(__NetBSD__)
    579 #define _LIBCPP_LOCALE__L_EXTENSIONS 1
    580 #endif
    581 
    582 #if defined(__FreeBSD__)
    583 #define _DECLARE_C99_LDBL_MATH 1
    584 #endif
    585 
    586 #if defined(__APPLE__) || defined(__FreeBSD__)
    587 #define _LIBCPP_HAS_DEFAULTRUNELOCALE
    588 #endif
    589 
    590 #if defined(__APPLE__) || defined(__FreeBSD__) || defined(__sun__)
    591 #define _LIBCPP_WCTYPE_IS_MASK
    592 #endif
    593 
    594 #ifndef _LIBCPP_TRIVIAL_PAIR_COPY_CTOR
    595 #  define _LIBCPP_TRIVIAL_PAIR_COPY_CTOR 1
    596 #endif
    597 
    598 #ifndef _LIBCPP_STD_VER
    599 #  if  __cplusplus <= 201103L
    600 #    define _LIBCPP_STD_VER 11
    601 #  else
    602 #    define _LIBCPP_STD_VER 13  // current year, or date of c++14 ratification
    603 #  endif
    604 #endif  // _LIBCPP_STD_VER
    605 
    606 #if _LIBCPP_STD_VER > 11
    607 #define _LIBCPP_DEPRECATED [[deprecated]]
    608 #else
    609 #define _LIBCPP_DEPRECATED
    610 #endif
    611 
    612 #if _LIBCPP_STD_VER <= 11
    613 #define _LIBCPP_CONSTEXPR_AFTER_CXX11
    614 #define _LIBCPP_EXPLICIT_AFTER_CXX11
    615 #define _LIBCPP_DEPRECATED_AFTER_CXX11
    616 #else
    617 #define _LIBCPP_CONSTEXPR_AFTER_CXX11 constexpr
    618 #define _LIBCPP_EXPLICIT_AFTER_CXX11 explicit
    619 #define _LIBCPP_DEPRECATED_AFTER_CXX11 [[deprecated]]
    620 #endif
    621 
    622 // Try to find out if RTTI is disabled.
    623 // g++ and cl.exe have RTTI on by default and define a macro when it is.
    624 // g++ only defines the macro in 4.3.2 and onwards.
    625 #if !defined(_LIBCPP_NO_RTTI)
    626 #  if defined(__GNUG__) && (__GNUC__ >= 4 && \
    627    (__GNUC_MINOR__ >= 3 || __GNUC_PATCHLEVEL__ >= 2)) && !defined(__GXX_RTTI)
    628 #    define _LIBCPP_NO_RTTI
    629 #  elif (defined(_MSC_VER) && !defined(__clang__)) && !defined(_CPPRTTI)
    630 #    define _LIBCPP_NO_RTTI
    631 #  endif
    632 #endif
    633 
    634 #ifndef _LIBCPP_WEAK
    635 #  define _LIBCPP_WEAK __attribute__((__weak__))
    636 #endif
    637 
    638 #endif  // _LIBCPP_CONFIG
    639