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