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 !_MSC_VER // explicit macro necessary because it is only defined below in this file 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 _WIN32 60 # define _LIBCPP_LITTLE_ENDIAN 1 61 # define _LIBCPP_BIG_ENDIAN 0 62 // Compiler intrinsics (GCC or MSVC) 63 # if (defined(_MSC_VER) && _MSC_VER >= 1400) \ 64 || (defined(__GNUC__) && _GNUC_VER > 403) 65 # define _LIBCP_HAS_IS_BASE_OF 66 # endif 67 #endif // _WIN32 68 69 #ifdef __linux__ 70 # if defined(__GNUC__) && _GNUC_VER >= 403 71 # define _LIBCP_HAS_IS_BASE_OF 72 # endif 73 #endif 74 75 #ifdef __sun__ 76 # include <sys/isa_defs.h> 77 # ifdef _LITTLE_ENDIAN 78 # define _LIBCPP_LITTLE_ENDIAN 1 79 # define _LIBCPP_BIG_ENDIAN 0 80 # else 81 # define _LIBCPP_LITTLE_ENDIAN 0 82 # define _LIBCPP_BIG_ENDIAN 1 83 # endif 84 #endif // __sun__ 85 86 #if !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN) 87 # include <endian.h> 88 # if __BYTE_ORDER == __LITTLE_ENDIAN 89 # define _LIBCPP_LITTLE_ENDIAN 1 90 # define _LIBCPP_BIG_ENDIAN 0 91 # elif __BYTE_ORDER == __BIG_ENDIAN 92 # define _LIBCPP_LITTLE_ENDIAN 0 93 # define _LIBCPP_BIG_ENDIAN 1 94 # else // __BYTE_ORDER == __BIG_ENDIAN 95 # error unable to determine endian 96 # endif 97 #endif // !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN) 98 99 #if _WIN32 100 101 // only really useful for a DLL 102 #ifdef _LIBCPP_DLL // this should be a compiler builtin define ideally... 103 # ifdef cxx_EXPORTS 104 # define _LIBCPP_HIDDEN 105 # define _LIBCPP_VISIBLE __declspec(dllexport) 106 # else 107 # define _LIBCPP_HIDDEN 108 # define _LIBCPP_VISIBLE __declspec(dllimport) 109 # endif 110 #else 111 # define _LIBCPP_HIDDEN 112 # define _LIBCPP_VISIBLE 113 #endif 114 115 #ifndef _LIBCPP_INLINE_VISIBILITY 116 # if _MSC_VER 117 # define _LIBCPP_INLINE_VISIBILITY __forceinline 118 # else // MinGW GCC and Clang 119 # define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__always_inline__)) 120 # endif 121 #endif 122 123 #ifndef _LIBCPP_EXCEPTION_ABI 124 #define _LIBCPP_EXCEPTION_ABI _LIBCPP_VISIBLE 125 #endif 126 127 #ifndef _LIBCPP_ALWAYS_INLINE 128 # if _MSC_VER 129 # define _LIBCPP_ALWAYS_INLINE __forceinline 130 # endif 131 #endif 132 133 #endif // _WIN32 134 135 #ifndef _LIBCPP_HIDDEN 136 #define _LIBCPP_HIDDEN __attribute__ ((__visibility__("hidden"))) 137 #endif 138 139 #ifndef _LIBCPP_VISIBLE 140 #define _LIBCPP_VISIBLE __attribute__ ((__visibility__("default"))) 141 #endif 142 143 #ifndef _LIBCPP_INLINE_VISIBILITY 144 #define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__visibility__("hidden"), __always_inline__)) 145 #endif 146 147 #ifndef _LIBCPP_EXCEPTION_ABI 148 #define _LIBCPP_EXCEPTION_ABI __attribute__ ((__visibility__("default"))) 149 #endif 150 151 #ifndef _LIBCPP_CANTTHROW 152 #define _LIBCPP_CANTTHROW __attribute__ ((__nothrow__)) 153 #endif 154 155 #ifndef _LIBCPP_ALWAYS_INLINE 156 #define _LIBCPP_ALWAYS_INLINE __attribute__ ((__visibility__("hidden"), __always_inline__)) 157 #endif 158 159 #if defined(__clang__) 160 161 #if __has_feature(cxx_alignas) 162 # define _ALIGNAS_TYPE(x) alignas(x) 163 # define _ALIGNAS(x) alignas(x) 164 #else 165 # define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x)))) 166 # define _ALIGNAS(x) __attribute__((__aligned__(x))) 167 #endif 168 169 #if !__has_feature(cxx_alias_templates) 170 #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 171 #endif 172 173 #ifndef __GXX_EXPERIMENTAL_CXX0X__ 174 #ifdef __linux__ 175 #define _LIBCPP_HAS_NO_UNICODE_CHARS 176 #else 177 typedef __char16_t char16_t; 178 typedef __char32_t char32_t; 179 #endif 180 #endif 181 182 #if !(__has_feature(cxx_exceptions)) 183 #define _LIBCPP_NO_EXCEPTIONS 184 #endif 185 186 #if !(__has_feature(cxx_rtti)) 187 #define _LIBCPP_NO_RTTI 188 #endif 189 190 #if !(__has_feature(cxx_strong_enums)) 191 #define _LIBCPP_HAS_NO_STRONG_ENUMS 192 #endif 193 194 #if !(__has_feature(cxx_decltype)) 195 #define _LIBCPP_HAS_NO_DECLTYPE 196 #endif 197 198 #if __has_feature(cxx_attributes) 199 # define _LIBCPP_NORETURN [[noreturn]] 200 #else 201 # define _LIBCPP_NORETURN __attribute__ ((noreturn)) 202 #endif 203 204 #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 205 206 #if !(__has_feature(cxx_deleted_functions)) 207 #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 208 #endif // !(__has_feature(cxx_deleted_functions)) 209 210 #if !(__has_feature(cxx_lambdas)) 211 #define _LIBCPP_HAS_NO_LAMBDAS 212 #endif 213 214 #if !(__has_feature(cxx_nullptr)) 215 #define _LIBCPP_HAS_NO_NULLPTR 216 #endif 217 218 #if !(__has_feature(cxx_rvalue_references)) 219 #define _LIBCPP_HAS_NO_RVALUE_REFERENCES 220 #endif 221 222 #if !(__has_feature(cxx_static_assert)) 223 #define _LIBCPP_HAS_NO_STATIC_ASSERT 224 #endif 225 226 #if !(__has_feature(cxx_auto_type)) 227 #define _LIBCPP_HAS_NO_AUTO_TYPE 228 #endif 229 230 #if !(__has_feature(cxx_access_control_sfinae)) || !__has_feature(cxx_trailing_return) 231 #define _LIBCPP_HAS_NO_ADVANCED_SFINAE 232 #endif 233 234 #if !(__has_feature(cxx_variadic_templates)) 235 #define _LIBCPP_HAS_NO_VARIADICS 236 #endif 237 238 #if !(__has_feature(cxx_trailing_return)) 239 #define _LIBCPP_HAS_NO_TRAILING_RETURN 240 #endif 241 242 #if !(__has_feature(cxx_generalized_initializers)) 243 #define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 244 #endif 245 246 #if __has_feature(is_base_of) 247 # define _LIBCP_HAS_IS_BASE_OF 248 #endif 249 250 // Objective-C++ features (opt-in) 251 #if __has_feature(objc_arc) 252 #define _LIBCPP_HAS_OBJC_ARC 253 #endif 254 255 #if __has_feature(objc_arc_weak) 256 #define _LIBCPP_HAS_OBJC_ARC_WEAK 257 #define _LIBCPP_HAS_NO_STRONG_ENUMS 258 #endif 259 260 #if !(__has_feature(cxx_constexpr)) 261 #define _LIBCPP_HAS_NO_CONSTEXPR 262 #endif 263 264 #if __FreeBSD__ && (__ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L) 265 #define _LIBCPP_HAS_QUICK_EXIT 266 #define _LIBCPP_HAS_C11_FEATURES 267 #endif 268 269 #if (__has_feature(cxx_noexcept)) 270 # define _NOEXCEPT noexcept 271 # define _NOEXCEPT_(x) noexcept(x) 272 #else 273 # define _NOEXCEPT throw() 274 # define _NOEXCEPT_(x) 275 #endif 276 277 #if __has_feature(underlying_type) 278 # define _LIBCXX_UNDERLYING_TYPE(T) __underlying_type(T) 279 #endif 280 281 // Inline namespaces are available in Clang regardless of C++ dialect. 282 #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE { 283 #define _LIBCPP_END_NAMESPACE_STD } } 284 #define _VSTD std::_LIBCPP_NAMESPACE 285 286 namespace std { 287 inline namespace _LIBCPP_NAMESPACE { 288 } 289 } 290 291 #elif defined(__GNUC__) 292 293 #define _ALIGNAS(x) __attribute__((__aligned__(x))) 294 #define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x)))) 295 296 #define _LIBCPP_NORETURN __attribute__((noreturn)) 297 298 #if !__EXCEPTIONS 299 #define _LIBCPP_NO_EXCEPTIONS 300 #endif 301 302 #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 303 #define _LIBCPP_HAS_NO_CONSTEXPR 304 305 #define _NOEXCEPT throw() 306 #define _NOEXCEPT_(x) 307 308 #ifndef __GXX_EXPERIMENTAL_CXX0X__ 309 310 #define _LIBCPP_HAS_NO_ADVANCED_SFINAE 311 #define _LIBCPP_HAS_NO_DECLTYPE 312 #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 313 #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 314 #define _LIBCPP_HAS_NO_NULLPTR 315 #define _LIBCPP_HAS_NO_STATIC_ASSERT 316 #define _LIBCPP_HAS_NO_UNICODE_CHARS 317 #define _LIBCPP_HAS_NO_VARIADICS 318 #define _LIBCPP_HAS_NO_RVALUE_REFERENCES 319 #define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS 320 321 #else // __GXX_EXPERIMENTAL_CXX0X__ 322 323 #define _LIBCPP_HAS_NO_TRAILING_RETURN 324 #define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS 325 326 #if _GNUC_VER < 403 327 #define _LIBCPP_HAS_NO_RVALUE_REFERENCES 328 #endif 329 330 #if _GNUC_VER < 403 331 #define _LIBCPP_HAS_NO_STATIC_ASSERT 332 #endif 333 334 #if _GNUC_VER < 407 335 #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 336 #endif 337 338 #if _GNUC_VER < 404 339 #define _LIBCPP_HAS_NO_ADVANCED_SFINAE 340 #define _LIBCPP_HAS_NO_DECLTYPE 341 #define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 342 #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 343 #define _LIBCPP_HAS_NO_UNICODE_CHARS 344 #define _LIBCPP_HAS_NO_VARIADICS 345 #define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 346 #endif // _GNUC_VER < 404 347 348 #if _GNUC_VER < 406 349 #define _LIBCPP_HAS_NO_NULLPTR 350 #endif 351 352 #endif // __GXX_EXPERIMENTAL_CXX0X__ 353 354 #if _GNUC_VER > 403 355 #define _LIBCP_HAS_IS_BASE_OF 356 #endif 357 358 #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { namespace _LIBCPP_NAMESPACE { 359 #define _LIBCPP_END_NAMESPACE_STD } } 360 #define _VSTD std::_LIBCPP_NAMESPACE 361 362 namespace std { 363 namespace _LIBCPP_NAMESPACE { 364 } 365 using namespace _LIBCPP_NAMESPACE __attribute__((__strong__)); 366 } 367 368 #elif defined(_MSC_VER) 369 370 #define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 371 #define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER 372 #define _LIBCPP_HAS_NO_CONSTEXPR 373 #define _LIBCPP_HAS_NO_UNICODE_CHARS 374 #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 375 #define __alignof__ __alignof 376 #define _LIBCPP_NORETURN __declspec(noreturn) 377 #define _ALIGNAS(x) __declspec(align(x)) 378 #define _LIBCPP_HAS_NO_VARIADICS 379 380 #define _NOEXCEPT throw() 381 #define _NOEXCEPT_(x) 382 383 #define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { 384 #define _LIBCPP_END_NAMESPACE_STD } 385 #define _VSTD std 386 387 namespace std { 388 } 389 390 #endif // __clang__ || __GNUC___ || _MSC_VER 391 392 #ifdef _LIBCPP_HAS_NO_UNICODE_CHARS 393 typedef unsigned short char16_t; 394 typedef unsigned int char32_t; 395 #endif // _LIBCPP_HAS_NO_UNICODE_CHARS 396 397 #ifdef _LIBCPP_HAS_NO_STATIC_ASSERT 398 399 template <bool> struct __static_assert_test; 400 template <> struct __static_assert_test<true> {}; 401 template <unsigned> struct __static_assert_check {}; 402 #define static_assert(__b, __m) \ 403 typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \ 404 _LIBCPP_CONCAT(__t, __LINE__) 405 406 #endif // _LIBCPP_HAS_NO_STATIC_ASSERT 407 408 #ifdef _LIBCPP_HAS_NO_DECLTYPE 409 #define decltype(x) __typeof__(x) 410 #endif 411 412 #ifdef _LIBCPP_HAS_NO_CONSTEXPR 413 #define _LIBCPP_CONSTEXPR 414 #else 415 #define _LIBCPP_CONSTEXPR constexpr 416 #endif 417 418 #ifdef __GNUC__ 419 #define _NOALIAS __attribute__((malloc)) 420 #else 421 #define _NOALIAS 422 #endif 423 424 #ifndef __has_feature 425 #define __has_feature(__x) 0 426 #endif 427 428 #if __has_feature(cxx_explicit_conversions) 429 # define _LIBCPP_EXPLICIT explicit 430 #else 431 # define _LIBCPP_EXPLICIT 432 #endif 433 434 #ifdef _LIBCPP_HAS_NO_STRONG_ENUMS 435 #define _LIBCPP_DECLARE_STRONG_ENUM(x) struct _LIBCPP_VISIBLE x { enum __lx 436 #define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) \ 437 __lx __v_; \ 438 _LIBCPP_ALWAYS_INLINE x(__lx __v) : __v_(__v) {} \ 439 _LIBCPP_ALWAYS_INLINE explicit x(int __v) : __v_(static_cast<__lx>(__v)) {} \ 440 _LIBCPP_ALWAYS_INLINE operator int() const {return __v_;} \ 441 }; 442 #else // _LIBCPP_HAS_NO_STRONG_ENUMS 443 #define _LIBCPP_DECLARE_STRONG_ENUM(x) enum class _LIBCPP_VISIBLE x 444 #define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) 445 #endif // _LIBCPP_HAS_NO_STRONG_ENUMS 446 447 #ifndef _LIBCPP_EXTERN_TEMPLATE 448 #define _LIBCPP_EXTERN_TEMPLATE(...) extern template __VA_ARGS__; 449 #endif 450 451 #if __APPLE__ || __FreeBSD__ || _WIN32 || __sun__ 452 #define _LIBCPP_LOCALE__L_EXTENSIONS 1 453 #endif 454 #if __FreeBSD__ 455 #define _DECLARE_C99_LDBL_MATH 1 456 #endif 457 458 #if __APPLE__ || __FreeBSD__ 459 #define _LIBCPP_HAS_DEFAULTRUNELOCALE 460 #endif 461 462 #if __APPLE__ || __FreeBSD__ || __sun__ 463 #define _LIBCPP_WCTYPE_IS_MASK 464 #endif 465 466 #ifdef _LIBCPP_DEBUG2 467 # if _LIBCPP_DEBUG2 == 0 468 # define _LIBCPP_DEBUG_LEVEL 1 469 # elif _LIBCPP_DEBUG2 == 1 470 # define _LIBCPP_DEBUG_LEVEL 2 471 # else 472 # error Supported values for _LIBCPP_DEBUG2 are 0 and 1 473 # endif 474 #endif 475 476 #ifdef _LIBCPP_DEBUG2 477 # include <__debug> 478 #else 479 # define _LIBCPP_ASSERT(x, m) ((void)0) 480 #endif 481 482 #endif // _LIBCPP_CONFIG 483