1227825Stheraven// -*- C++ -*- 2227825Stheraven//===--------------------------- __config ---------------------------------===// 3227825Stheraven// 4227825Stheraven// The LLVM Compiler Infrastructure 5227825Stheraven// 6227825Stheraven// This file is dual licensed under the MIT and the University of Illinois Open 7227825Stheraven// Source Licenses. See LICENSE.TXT for details. 8227825Stheraven// 9227825Stheraven//===----------------------------------------------------------------------===// 10227825Stheraven 11227825Stheraven#ifndef _LIBCPP_CONFIG 12227825Stheraven#define _LIBCPP_CONFIG 13227825Stheraven 14262801Sdim#if !defined(_MSC_VER) || defined(__clang__) 15227825Stheraven#pragma GCC system_header 16227825Stheraven#endif 17227825Stheraven 18241903Sdim#ifdef __GNUC__ 19241903Sdim#define _GNUC_VER (__GNUC__ * 100 + __GNUC_MINOR__) 20241903Sdim#endif 21227825Stheraven 22278724Sdim#if !_WIN32 23278724Sdim#include <unistd.h> 24278724Sdim#include <errno.h> // for ELAST on FreeBSD 25278724Sdim#endif 26278724Sdim 27241903Sdim#define _LIBCPP_VERSION 1101 28241903Sdim 29227825Stheraven#define _LIBCPP_ABI_VERSION 1 30227825Stheraven 31227825Stheraven#define _LIBCPP_CONCAT1(_LIBCPP_X,_LIBCPP_Y) _LIBCPP_X##_LIBCPP_Y 32227825Stheraven#define _LIBCPP_CONCAT(_LIBCPP_X,_LIBCPP_Y) _LIBCPP_CONCAT1(_LIBCPP_X,_LIBCPP_Y) 33227825Stheraven 34227825Stheraven#define _LIBCPP_NAMESPACE _LIBCPP_CONCAT(__,_LIBCPP_ABI_VERSION) 35227825Stheraven 36227825Stheraven#ifdef __LITTLE_ENDIAN__ 37227825Stheraven#if __LITTLE_ENDIAN__ 38227825Stheraven#define _LIBCPP_LITTLE_ENDIAN 1 39227825Stheraven#define _LIBCPP_BIG_ENDIAN 0 40227825Stheraven#endif // __LITTLE_ENDIAN__ 41227825Stheraven#endif // __LITTLE_ENDIAN__ 42227825Stheraven 43227825Stheraven#ifdef __BIG_ENDIAN__ 44227825Stheraven#if __BIG_ENDIAN__ 45227825Stheraven#define _LIBCPP_LITTLE_ENDIAN 0 46227825Stheraven#define _LIBCPP_BIG_ENDIAN 1 47227825Stheraven#endif // __BIG_ENDIAN__ 48227825Stheraven#endif // __BIG_ENDIAN__ 49227825Stheraven 50227825Stheraven#ifdef __FreeBSD__ 51227825Stheraven# include <sys/endian.h> 52227825Stheraven# if _BYTE_ORDER == _LITTLE_ENDIAN 53227825Stheraven# define _LIBCPP_LITTLE_ENDIAN 1 54227825Stheraven# define _LIBCPP_BIG_ENDIAN 0 55227825Stheraven# else // _BYTE_ORDER == _LITTLE_ENDIAN 56227825Stheraven# define _LIBCPP_LITTLE_ENDIAN 0 57227825Stheraven# define _LIBCPP_BIG_ENDIAN 1 58227825Stheraven# endif // _BYTE_ORDER == _LITTLE_ENDIAN 59243572Sdim# ifndef __LONG_LONG_SUPPORTED 60243572Sdim# define _LIBCPP_HAS_NO_LONG_LONG 61243572Sdim# endif // __LONG_LONG_SUPPORTED 62227825Stheraven#endif // __FreeBSD__ 63227825Stheraven 64253159Stheraven#ifdef __NetBSD__ 65253159Stheraven# include <sys/endian.h> 66253159Stheraven# if _BYTE_ORDER == _LITTLE_ENDIAN 67253159Stheraven# define _LIBCPP_LITTLE_ENDIAN 1 68253159Stheraven# define _LIBCPP_BIG_ENDIAN 0 69253159Stheraven# else // _BYTE_ORDER == _LITTLE_ENDIAN 70253159Stheraven# define _LIBCPP_LITTLE_ENDIAN 0 71253159Stheraven# define _LIBCPP_BIG_ENDIAN 1 72253159Stheraven# endif // _BYTE_ORDER == _LITTLE_ENDIAN 73253159Stheraven# define _LIBCPP_HAS_QUICK_EXIT 74253159Stheraven#endif // __NetBSD__ 75253159Stheraven 76227825Stheraven#ifdef _WIN32 77227825Stheraven# define _LIBCPP_LITTLE_ENDIAN 1 78227825Stheraven# define _LIBCPP_BIG_ENDIAN 0 79227825Stheraven// Compiler intrinsics (GCC or MSVC) 80262801Sdim# if defined(__clang__) \ 81262801Sdim || (defined(_MSC_VER) && _MSC_VER >= 1400) \ 82241903Sdim || (defined(__GNUC__) && _GNUC_VER > 403) 83262801Sdim# define _LIBCPP_HAS_IS_BASE_OF 84227825Stheraven# endif 85262801Sdim# if defined(_MSC_VER) && !defined(__clang__) 86262801Sdim# define _LIBCPP_MSVC // Using Microsoft Visual C++ compiler 87262801Sdim# define _LIBCPP_TOSTRING2(x) #x 88262801Sdim# define _LIBCPP_TOSTRING(x) _LIBCPP_TOSTRING2(x) 89262801Sdim# define _LIBCPP_WARNING(x) __pragma(message(__FILE__ "(" _LIBCPP_TOSTRING(__LINE__) ") : warning note: " x)) 90262801Sdim# endif 91262801Sdim# // If mingw not explicitly detected, assume using MS C runtime only. 92262801Sdim# ifndef __MINGW32__ 93262801Sdim# define _LIBCPP_MSVCRT // Using Microsoft's C Runtime library 94262801Sdim# endif 95227825Stheraven#endif // _WIN32 96227825Stheraven 97246487Stheraven#ifdef __linux__ 98246487Stheraven# if defined(__GNUC__) && _GNUC_VER >= 403 99262801Sdim# define _LIBCPP_HAS_IS_BASE_OF 100246487Stheraven# endif 101246487Stheraven#endif 102246487Stheraven 103232950Stheraven#ifdef __sun__ 104232950Stheraven# include <sys/isa_defs.h> 105232950Stheraven# ifdef _LITTLE_ENDIAN 106232950Stheraven# define _LIBCPP_LITTLE_ENDIAN 1 107232950Stheraven# define _LIBCPP_BIG_ENDIAN 0 108232950Stheraven# else 109232950Stheraven# define _LIBCPP_LITTLE_ENDIAN 0 110232950Stheraven# define _LIBCPP_BIG_ENDIAN 1 111232950Stheraven# endif 112232950Stheraven#endif // __sun__ 113232950Stheraven 114278724Sdim#if defined(__native_client__) 115278724Sdim // NaCl's sandbox (which PNaCl also runs in) doesn't allow filesystem access, 116278724Sdim // including accesses to the special files under /dev. C++11's 117278724Sdim // std::random_device is instead exposed through a NaCl syscall. 118278724Sdim# define _LIBCPP_USING_NACL_RANDOM 119278724Sdim#endif // defined(__native_client__) 120278724Sdim 121227825Stheraven#if !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN) 122227825Stheraven# include <endian.h> 123227825Stheraven# if __BYTE_ORDER == __LITTLE_ENDIAN 124227825Stheraven# define _LIBCPP_LITTLE_ENDIAN 1 125227825Stheraven# define _LIBCPP_BIG_ENDIAN 0 126227825Stheraven# elif __BYTE_ORDER == __BIG_ENDIAN 127227825Stheraven# define _LIBCPP_LITTLE_ENDIAN 0 128227825Stheraven# define _LIBCPP_BIG_ENDIAN 1 129227825Stheraven# else // __BYTE_ORDER == __BIG_ENDIAN 130227825Stheraven# error unable to determine endian 131227825Stheraven# endif 132227825Stheraven#endif // !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN) 133227825Stheraven 134249998Sdim#ifdef _WIN32 135227825Stheraven 136227825Stheraven// only really useful for a DLL 137227825Stheraven#ifdef _LIBCPP_DLL // this should be a compiler builtin define ideally... 138227825Stheraven# ifdef cxx_EXPORTS 139227825Stheraven# define _LIBCPP_HIDDEN 140249998Sdim# define _LIBCPP_FUNC_VIS __declspec(dllexport) 141249998Sdim# define _LIBCPP_TYPE_VIS __declspec(dllexport) 142227825Stheraven# else 143227825Stheraven# define _LIBCPP_HIDDEN 144249998Sdim# define _LIBCPP_FUNC_VIS __declspec(dllimport) 145249998Sdim# define _LIBCPP_TYPE_VIS __declspec(dllimport) 146227825Stheraven# endif 147227825Stheraven#else 148227825Stheraven# define _LIBCPP_HIDDEN 149249998Sdim# define _LIBCPP_FUNC_VIS 150249998Sdim# define _LIBCPP_TYPE_VIS 151227825Stheraven#endif 152227825Stheraven 153262801Sdim#define _LIBCPP_TYPE_VIS_ONLY 154262801Sdim#define _LIBCPP_FUNC_VIS_ONLY 155262801Sdim 156227825Stheraven#ifndef _LIBCPP_INLINE_VISIBILITY 157262801Sdim# ifdef _LIBCPP_MSVC 158227825Stheraven# define _LIBCPP_INLINE_VISIBILITY __forceinline 159227825Stheraven# else // MinGW GCC and Clang 160227825Stheraven# define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__always_inline__)) 161227825Stheraven# endif 162227825Stheraven#endif 163227825Stheraven 164227825Stheraven#ifndef _LIBCPP_EXCEPTION_ABI 165249998Sdim#define _LIBCPP_EXCEPTION_ABI _LIBCPP_TYPE_VIS 166227825Stheraven#endif 167227825Stheraven 168227825Stheraven#ifndef _LIBCPP_ALWAYS_INLINE 169262801Sdim# ifdef _LIBCPP_MSVC 170227825Stheraven# define _LIBCPP_ALWAYS_INLINE __forceinline 171227825Stheraven# endif 172227825Stheraven#endif 173227825Stheraven 174227825Stheraven#endif // _WIN32 175227825Stheraven 176253159Stheraven#ifndef __has_attribute 177253159Stheraven#define __has_attribute(__x) 0 178253159Stheraven#endif 179253159Stheraven 180227825Stheraven#ifndef _LIBCPP_HIDDEN 181227825Stheraven#define _LIBCPP_HIDDEN __attribute__ ((__visibility__("hidden"))) 182227825Stheraven#endif 183227825Stheraven 184249998Sdim#ifndef _LIBCPP_FUNC_VIS 185249998Sdim#define _LIBCPP_FUNC_VIS __attribute__ ((__visibility__("default"))) 186227825Stheraven#endif 187227825Stheraven 188249998Sdim#ifndef _LIBCPP_TYPE_VIS 189262801Sdim# if __has_attribute(__type_visibility__) 190249998Sdim# define _LIBCPP_TYPE_VIS __attribute__ ((__type_visibility__("default"))) 191249998Sdim# else 192249998Sdim# define _LIBCPP_TYPE_VIS __attribute__ ((__visibility__("default"))) 193249998Sdim# endif 194249998Sdim#endif 195249998Sdim 196262801Sdim#ifndef _LIBCPP_TYPE_VIS_ONLY 197262801Sdim# define _LIBCPP_TYPE_VIS_ONLY _LIBCPP_TYPE_VIS 198262801Sdim#endif 199262801Sdim 200262801Sdim#ifndef _LIBCPP_FUNC_VIS_ONLY 201262801Sdim# define _LIBCPP_FUNC_VIS_ONLY _LIBCPP_FUNC_VIS 202262801Sdim#endif 203262801Sdim 204227825Stheraven#ifndef _LIBCPP_INLINE_VISIBILITY 205227825Stheraven#define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__visibility__("hidden"), __always_inline__)) 206227825Stheraven#endif 207227825Stheraven 208227825Stheraven#ifndef _LIBCPP_EXCEPTION_ABI 209278724Sdim#define _LIBCPP_EXCEPTION_ABI __attribute__ ((__visibility__("default"))) 210227825Stheraven#endif 211227825Stheraven 212227825Stheraven#ifndef _LIBCPP_ALWAYS_INLINE 213227825Stheraven#define _LIBCPP_ALWAYS_INLINE __attribute__ ((__visibility__("hidden"), __always_inline__)) 214227825Stheraven#endif 215227825Stheraven 216227825Stheraven#if defined(__clang__) 217227825Stheraven 218278724Sdim#if defined(__APPLE__) && !defined(__i386__) && !defined(__x86_64__) && \ 219278724Sdim !defined(__arm__) 220278724Sdim#define _LIBCPP_ALTERNATE_STRING_LAYOUT 221278724Sdim#endif 222278724Sdim 223227825Stheraven#if __has_feature(cxx_alignas) 224241903Sdim# define _ALIGNAS_TYPE(x) alignas(x) 225227825Stheraven# define _ALIGNAS(x) alignas(x) 226227825Stheraven#else 227241903Sdim# define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x)))) 228227825Stheraven# define _ALIGNAS(x) __attribute__((__aligned__(x))) 229227825Stheraven#endif 230227825Stheraven 231227825Stheraven#if !__has_feature(cxx_alias_templates) 232227825Stheraven#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 233227825Stheraven#endif 234227825Stheraven 235278724Sdim#if __cplusplus < 201103L 236227825Stheraventypedef __char16_t char16_t; 237227825Stheraventypedef __char32_t char32_t; 238227825Stheraven#endif 239227825Stheraven 240227825Stheraven#if !(__has_feature(cxx_exceptions)) 241227825Stheraven#define _LIBCPP_NO_EXCEPTIONS 242227825Stheraven#endif 243227825Stheraven 244227825Stheraven#if !(__has_feature(cxx_rtti)) 245227825Stheraven#define _LIBCPP_NO_RTTI 246227825Stheraven#endif 247227825Stheraven 248232950Stheraven#if !(__has_feature(cxx_strong_enums)) 249232950Stheraven#define _LIBCPP_HAS_NO_STRONG_ENUMS 250232950Stheraven#endif 251232950Stheraven 252227825Stheraven#if !(__has_feature(cxx_decltype)) 253227825Stheraven#define _LIBCPP_HAS_NO_DECLTYPE 254227825Stheraven#endif 255227825Stheraven 256227825Stheraven#if __has_feature(cxx_attributes) 257241903Sdim# define _LIBCPP_NORETURN [[noreturn]] 258227825Stheraven#else 259241903Sdim# define _LIBCPP_NORETURN __attribute__ ((noreturn)) 260227825Stheraven#endif 261227825Stheraven 262278724Sdim#define _LIBCPP_UNUSED __attribute__((__unused__)) 263278724Sdim 264253159Stheraven#if !(__has_feature(cxx_defaulted_functions)) 265227825Stheraven#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 266253159Stheraven#endif // !(__has_feature(cxx_defaulted_functions)) 267227825Stheraven 268227825Stheraven#if !(__has_feature(cxx_deleted_functions)) 269227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 270227825Stheraven#endif // !(__has_feature(cxx_deleted_functions)) 271227825Stheraven 272227825Stheraven#if !(__has_feature(cxx_lambdas)) 273227825Stheraven#define _LIBCPP_HAS_NO_LAMBDAS 274227825Stheraven#endif 275227825Stheraven 276227825Stheraven#if !(__has_feature(cxx_nullptr)) 277227825Stheraven#define _LIBCPP_HAS_NO_NULLPTR 278227825Stheraven#endif 279227825Stheraven 280227825Stheraven#if !(__has_feature(cxx_rvalue_references)) 281227825Stheraven#define _LIBCPP_HAS_NO_RVALUE_REFERENCES 282227825Stheraven#endif 283227825Stheraven 284227825Stheraven#if !(__has_feature(cxx_static_assert)) 285227825Stheraven#define _LIBCPP_HAS_NO_STATIC_ASSERT 286227825Stheraven#endif 287227825Stheraven 288227825Stheraven#if !(__has_feature(cxx_auto_type)) 289227825Stheraven#define _LIBCPP_HAS_NO_AUTO_TYPE 290227825Stheraven#endif 291227825Stheraven 292227825Stheraven#if !(__has_feature(cxx_access_control_sfinae)) || !__has_feature(cxx_trailing_return) 293227825Stheraven#define _LIBCPP_HAS_NO_ADVANCED_SFINAE 294227825Stheraven#endif 295227825Stheraven 296227825Stheraven#if !(__has_feature(cxx_variadic_templates)) 297227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS 298227825Stheraven#endif 299227825Stheraven 300227825Stheraven#if !(__has_feature(cxx_trailing_return)) 301227825Stheraven#define _LIBCPP_HAS_NO_TRAILING_RETURN 302227825Stheraven#endif 303227825Stheraven 304227825Stheraven#if !(__has_feature(cxx_generalized_initializers)) 305227825Stheraven#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 306227825Stheraven#endif 307227825Stheraven 308227825Stheraven#if __has_feature(is_base_of) 309262801Sdim# define _LIBCPP_HAS_IS_BASE_OF 310227825Stheraven#endif 311227825Stheraven 312227825Stheraven// Objective-C++ features (opt-in) 313227825Stheraven#if __has_feature(objc_arc) 314227825Stheraven#define _LIBCPP_HAS_OBJC_ARC 315227825Stheraven#endif 316227825Stheraven 317227825Stheraven#if __has_feature(objc_arc_weak) 318227825Stheraven#define _LIBCPP_HAS_OBJC_ARC_WEAK 319232950Stheraven#define _LIBCPP_HAS_NO_STRONG_ENUMS 320227825Stheraven#endif 321227825Stheraven 322227825Stheraven#if !(__has_feature(cxx_constexpr)) 323227825Stheraven#define _LIBCPP_HAS_NO_CONSTEXPR 324227825Stheraven#endif 325227825Stheraven 326278724Sdim#if !(__has_feature(cxx_relaxed_constexpr)) 327278724Sdim#define _LIBCPP_HAS_NO_CXX14_CONSTEXPR 328278724Sdim#endif 329278724Sdim 330253159Stheraven#if __ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L 331253159Stheraven#if defined(__FreeBSD__) 332232972Stheraven#define _LIBCPP_HAS_QUICK_EXIT 333241903Sdim#define _LIBCPP_HAS_C11_FEATURES 334278724Sdim#elif defined(__ANDROID__) 335278724Sdim#define _LIBCPP_HAS_QUICK_EXIT 336253159Stheraven#elif defined(__linux__) 337253159Stheraven#include <features.h> 338253159Stheraven#if __GLIBC_PREREQ(2, 15) 339253159Stheraven#define _LIBCPP_HAS_QUICK_EXIT 340232972Stheraven#endif 341253159Stheraven#if __GLIBC_PREREQ(2, 17) 342253159Stheraven#define _LIBCPP_HAS_C11_FEATURES 343253159Stheraven#endif 344253159Stheraven#endif 345253159Stheraven#endif 346232972Stheraven 347227825Stheraven#if (__has_feature(cxx_noexcept)) 348227825Stheraven# define _NOEXCEPT noexcept 349227825Stheraven# define _NOEXCEPT_(x) noexcept(x) 350278724Sdim# define _NOEXCEPT_OR_FALSE(x) noexcept(x) 351227825Stheraven#else 352227825Stheraven# define _NOEXCEPT throw() 353227825Stheraven# define _NOEXCEPT_(x) 354278724Sdim# define _NOEXCEPT_OR_FALSE(x) false 355227825Stheraven#endif 356227825Stheraven 357227825Stheraven#if __has_feature(underlying_type) 358278724Sdim# define _LIBCPP_UNDERLYING_TYPE(T) __underlying_type(T) 359227825Stheraven#endif 360227825Stheraven 361278724Sdim#if __has_feature(is_literal) 362278724Sdim# define _LIBCPP_IS_LITERAL(T) __is_literal(T) 363278724Sdim#endif 364278724Sdim 365227825Stheraven// Inline namespaces are available in Clang regardless of C++ dialect. 366227825Stheraven#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE { 367227825Stheraven#define _LIBCPP_END_NAMESPACE_STD } } 368227825Stheraven#define _VSTD std::_LIBCPP_NAMESPACE 369227825Stheraven 370227825Stheravennamespace std { 371227825Stheraven inline namespace _LIBCPP_NAMESPACE { 372227825Stheraven } 373227825Stheraven} 374227825Stheraven 375278724Sdim#if !defined(_LIBCPP_HAS_NO_ASAN) && !__has_feature(address_sanitizer) 376278724Sdim#define _LIBCPP_HAS_NO_ASAN 377278724Sdim#endif 378278724Sdim 379227825Stheraven#elif defined(__GNUC__) 380227825Stheraven 381227825Stheraven#define _ALIGNAS(x) __attribute__((__aligned__(x))) 382241903Sdim#define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x)))) 383227825Stheraven 384241903Sdim#define _LIBCPP_NORETURN __attribute__((noreturn)) 385227825Stheraven 386278724Sdim#define _LIBCPP_UNUSED __attribute__((__unused__)) 387278724Sdim 388278724Sdim#if _GNUC_VER >= 407 389278724Sdim#define _LIBCPP_UNDERLYING_TYPE(T) __underlying_type(T) 390278724Sdim#define _LIBCPP_IS_LITERAL(T) __is_literal_type(T) 391278724Sdim#endif 392278724Sdim 393227825Stheraven#if !__EXCEPTIONS 394227825Stheraven#define _LIBCPP_NO_EXCEPTIONS 395227825Stheraven#endif 396227825Stheraven 397227825Stheraven#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 398278724Sdim 399278724Sdim// constexpr was added to GCC in 4.6. 400278724Sdim#if _GNUC_VER < 406 401227825Stheraven#define _LIBCPP_HAS_NO_CONSTEXPR 402278724Sdim// Can only use constexpr in c++11 mode. 403278724Sdim#elif !defined(__GXX_EXPERIMENTAL_CXX0X__) && __cplusplus < 201103L 404278724Sdim#define _LIBCPP_HAS_NO_CONSTEXPR 405278724Sdim#endif 406227825Stheraven 407278724Sdim// No version of GCC supports relaxed constexpr rules 408278724Sdim#define _LIBCPP_HAS_NO_CXX14_CONSTEXPR 409278724Sdim 410227825Stheraven#define _NOEXCEPT throw() 411227825Stheraven#define _NOEXCEPT_(x) 412278724Sdim#define _NOEXCEPT_OR_FALSE(x) false 413227825Stheraven 414227825Stheraven#ifndef __GXX_EXPERIMENTAL_CXX0X__ 415227825Stheraven 416227825Stheraven#define _LIBCPP_HAS_NO_ADVANCED_SFINAE 417227825Stheraven#define _LIBCPP_HAS_NO_DECLTYPE 418227825Stheraven#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 419227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 420227825Stheraven#define _LIBCPP_HAS_NO_NULLPTR 421227825Stheraven#define _LIBCPP_HAS_NO_STATIC_ASSERT 422227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS 423227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS 424227825Stheraven#define _LIBCPP_HAS_NO_RVALUE_REFERENCES 425227825Stheraven#define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS 426278724Sdim#define _LIBCPP_HAS_NO_STRONG_ENUMS 427227825Stheraven 428227825Stheraven#else // __GXX_EXPERIMENTAL_CXX0X__ 429227825Stheraven 430227825Stheraven#define _LIBCPP_HAS_NO_TRAILING_RETURN 431227825Stheraven#define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS 432227825Stheraven 433241903Sdim#if _GNUC_VER < 403 434227825Stheraven#define _LIBCPP_HAS_NO_RVALUE_REFERENCES 435227825Stheraven#endif 436227825Stheraven 437241903Sdim#if _GNUC_VER < 403 438227825Stheraven#define _LIBCPP_HAS_NO_STATIC_ASSERT 439227825Stheraven#endif 440227825Stheraven 441241903Sdim#if _GNUC_VER < 404 442227825Stheraven#define _LIBCPP_HAS_NO_DECLTYPE 443227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 444227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS 445227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS 446227825Stheraven#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 447241903Sdim#endif // _GNUC_VER < 404 448227825Stheraven 449241903Sdim#if _GNUC_VER < 406 450227825Stheraven#define _LIBCPP_HAS_NO_NULLPTR 451227825Stheraven#endif 452227825Stheraven 453278724Sdim#if _GNUC_VER < 407 454278724Sdim#define _LIBCPP_HAS_NO_ADVANCED_SFINAE 455278724Sdim#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 456278724Sdim#endif 457278724Sdim 458227825Stheraven#endif // __GXX_EXPERIMENTAL_CXX0X__ 459227825Stheraven 460227825Stheraven#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { namespace _LIBCPP_NAMESPACE { 461227825Stheraven#define _LIBCPP_END_NAMESPACE_STD } } 462227825Stheraven#define _VSTD std::_LIBCPP_NAMESPACE 463227825Stheraven 464227825Stheravennamespace std { 465227825Stheravennamespace _LIBCPP_NAMESPACE { 466227825Stheraven} 467227825Stheravenusing namespace _LIBCPP_NAMESPACE __attribute__((__strong__)); 468227825Stheraven} 469227825Stheraven 470278724Sdim#if !defined(_LIBCPP_HAS_NO_ASAN) && !defined(__SANITIZE_ADDRESS__) 471278724Sdim#define _LIBCPP_HAS_NO_ASAN 472278724Sdim#endif 473278724Sdim 474262801Sdim#elif defined(_LIBCPP_MSVC) 475227825Stheraven 476227825Stheraven#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 477227825Stheraven#define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER 478227825Stheraven#define _LIBCPP_HAS_NO_CONSTEXPR 479278724Sdim#define _LIBCPP_HAS_NO_CXX14_CONSTEXPR 480227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS 481227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 482262801Sdim#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 483227825Stheraven#define __alignof__ __alignof 484241903Sdim#define _LIBCPP_NORETURN __declspec(noreturn) 485278724Sdim#define _LIBCPP_UNUSED 486227825Stheraven#define _ALIGNAS(x) __declspec(align(x)) 487227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS 488227825Stheraven 489278724Sdim#define _NOEXCEPT throw () 490227825Stheraven#define _NOEXCEPT_(x) 491278724Sdim#define _NOEXCEPT_OR_FALSE(x) false 492227825Stheraven 493227825Stheraven#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { 494227825Stheraven#define _LIBCPP_END_NAMESPACE_STD } 495227825Stheraven#define _VSTD std 496227825Stheraven 497262801Sdim# define _LIBCPP_WEAK 498227825Stheravennamespace std { 499227825Stheraven} 500227825Stheraven 501278724Sdim#define _LIBCPP_HAS_NO_ASAN 502278724Sdim 503262801Sdim#elif defined(__IBMCPP__) 504227825Stheraven 505262801Sdim#define _ALIGNAS(x) __attribute__((__aligned__(x))) 506262801Sdim#define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x)))) 507262801Sdim#define _ATTRIBUTE(x) __attribute__((x)) 508262801Sdim#define _LIBCPP_NORETURN __attribute__((noreturn)) 509278724Sdim#define _LIBCPP_UNUSED 510262801Sdim 511262801Sdim#define _NOEXCEPT throw() 512262801Sdim#define _NOEXCEPT_(x) 513278724Sdim#define _NOEXCEPT_OR_FALSE(x) false 514262801Sdim 515262801Sdim#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 516262801Sdim#define _LIBCPP_HAS_NO_ADVANCED_SFINAE 517262801Sdim#define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS 518262801Sdim#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 519262801Sdim#define _LIBCPP_HAS_NO_NULLPTR 520262801Sdim#define _LIBCPP_HAS_NO_UNICODE_CHARS 521262801Sdim#define _LIBCPP_HAS_IS_BASE_OF 522262801Sdim 523262801Sdim#if defined(_AIX) 524262801Sdim#define __MULTILOCALE_API 525262801Sdim#endif 526262801Sdim 527262801Sdim#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE { 528262801Sdim#define _LIBCPP_END_NAMESPACE_STD } } 529262801Sdim#define _VSTD std::_LIBCPP_NAMESPACE 530262801Sdim 531262801Sdimnamespace std { 532262801Sdim inline namespace _LIBCPP_NAMESPACE { 533262801Sdim } 534262801Sdim} 535262801Sdim 536278724Sdim#define _LIBCPP_HAS_NO_ASAN 537262801Sdim 538278724Sdim#endif // __clang__ || __GNUC__ || _MSC_VER || __IBMCPP__ 539278724Sdim 540227825Stheraven#ifdef _LIBCPP_HAS_NO_UNICODE_CHARS 541227825Stheraventypedef unsigned short char16_t; 542227825Stheraventypedef unsigned int char32_t; 543227825Stheraven#endif // _LIBCPP_HAS_NO_UNICODE_CHARS 544227825Stheraven 545278724Sdim#ifndef __SIZEOF_INT128__ 546278724Sdim#define _LIBCPP_HAS_NO_INT128 547278724Sdim#endif 548278724Sdim 549227825Stheraven#ifdef _LIBCPP_HAS_NO_STATIC_ASSERT 550227825Stheraven 551227825Stheraventemplate <bool> struct __static_assert_test; 552227825Stheraventemplate <> struct __static_assert_test<true> {}; 553227825Stheraventemplate <unsigned> struct __static_assert_check {}; 554227825Stheraven#define static_assert(__b, __m) \ 555227825Stheraven typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \ 556227825Stheraven _LIBCPP_CONCAT(__t, __LINE__) 557227825Stheraven 558227825Stheraven#endif // _LIBCPP_HAS_NO_STATIC_ASSERT 559227825Stheraven 560227825Stheraven#ifdef _LIBCPP_HAS_NO_DECLTYPE 561227825Stheraven#define decltype(x) __typeof__(x) 562227825Stheraven#endif 563227825Stheraven 564227825Stheraven#ifdef _LIBCPP_HAS_NO_CONSTEXPR 565234976Stheraven#define _LIBCPP_CONSTEXPR 566234976Stheraven#else 567234976Stheraven#define _LIBCPP_CONSTEXPR constexpr 568227825Stheraven#endif 569227825Stheraven 570253159Stheraven#ifdef _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 571253159Stheraven#define _LIBCPP_DEFAULT {} 572253159Stheraven#else 573253159Stheraven#define _LIBCPP_DEFAULT = default; 574253159Stheraven#endif 575253159Stheraven 576241903Sdim#ifdef __GNUC__ 577253159Stheraven#define _NOALIAS __attribute__((__malloc__)) 578241903Sdim#else 579241903Sdim#define _NOALIAS 580241903Sdim#endif 581241903Sdim 582227825Stheraven#ifndef __has_feature 583227825Stheraven#define __has_feature(__x) 0 584227825Stheraven#endif 585227825Stheraven 586278724Sdim#ifndef __has_builtin 587278724Sdim#define __has_builtin(__x) 0 588278724Sdim#endif 589278724Sdim 590278724Sdim#if __has_feature(cxx_explicit_conversions) || defined(__IBMCPP__) 591232950Stheraven# define _LIBCPP_EXPLICIT explicit 592232950Stheraven#else 593232950Stheraven# define _LIBCPP_EXPLICIT 594232950Stheraven#endif 595232950Stheraven 596278724Sdim#if !__has_builtin(__builtin_operator_new) || !__has_builtin(__builtin_operator_delete) 597278724Sdim# define _LIBCPP_HAS_NO_BUILTIN_OPERATOR_NEW_DELETE 598278724Sdim#endif 599278724Sdim 600232950Stheraven#ifdef _LIBCPP_HAS_NO_STRONG_ENUMS 601249998Sdim#define _LIBCPP_DECLARE_STRONG_ENUM(x) struct _LIBCPP_TYPE_VIS x { enum __lx 602232950Stheraven#define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) \ 603242945Stheraven __lx __v_; \ 604242945Stheraven _LIBCPP_ALWAYS_INLINE x(__lx __v) : __v_(__v) {} \ 605242945Stheraven _LIBCPP_ALWAYS_INLINE explicit x(int __v) : __v_(static_cast<__lx>(__v)) {} \ 606232950Stheraven _LIBCPP_ALWAYS_INLINE operator int() const {return __v_;} \ 607232950Stheraven }; 608232950Stheraven#else // _LIBCPP_HAS_NO_STRONG_ENUMS 609249998Sdim#define _LIBCPP_DECLARE_STRONG_ENUM(x) enum class _LIBCPP_TYPE_VIS x 610232950Stheraven#define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) 611232950Stheraven#endif // _LIBCPP_HAS_NO_STRONG_ENUMS 612232950Stheraven 613262801Sdim#ifdef _LIBCPP_DEBUG 614262801Sdim# if _LIBCPP_DEBUG == 0 615262801Sdim# define _LIBCPP_DEBUG_LEVEL 1 616262801Sdim# elif _LIBCPP_DEBUG == 1 617262801Sdim# define _LIBCPP_DEBUG_LEVEL 2 618262801Sdim# else 619262801Sdim# error Supported values for _LIBCPP_DEBUG are 0 and 1 620262801Sdim# endif 621262801Sdim# define _LIBCPP_EXTERN_TEMPLATE(...) 622262801Sdim#endif 623262801Sdim 624242945Stheraven#ifndef _LIBCPP_EXTERN_TEMPLATE 625278724Sdim#define _LIBCPP_EXTERN_TEMPLATE(...) extern template __VA_ARGS__; 626242945Stheraven#endif 627242945Stheraven 628262801Sdim#ifndef _LIBCPP_EXTERN_TEMPLATE2 629262801Sdim#define _LIBCPP_EXTERN_TEMPLATE2(...) extern template __VA_ARGS__; 630262801Sdim#endif 631262801Sdim 632278724Sdim#if defined(__APPLE__) && defined(__LP64__) && !defined(__x86_64__) 633278724Sdim#define _LIBCPP_NONUNIQUE_RTTI_BIT (1ULL << 63) 634278724Sdim#endif 635278724Sdim 636253159Stheraven#if defined(__APPLE__) || defined(__FreeBSD__) || defined(_WIN32) || defined(__sun__) || defined(__NetBSD__) 637227825Stheraven#define _LIBCPP_LOCALE__L_EXTENSIONS 1 638227825Stheraven#endif 639278724Sdim 640249998Sdim#ifdef __FreeBSD__ 641227825Stheraven#define _DECLARE_C99_LDBL_MATH 1 642227825Stheraven#endif 643227825Stheraven 644249998Sdim#if defined(__APPLE__) || defined(__FreeBSD__) 645227825Stheraven#define _LIBCPP_HAS_DEFAULTRUNELOCALE 646227825Stheraven#endif 647227825Stheraven 648249998Sdim#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__sun__) 649227825Stheraven#define _LIBCPP_WCTYPE_IS_MASK 650227825Stheraven#endif 651227825Stheraven 652278724Sdim#if defined(ELAST) 653278724Sdim#define _LIBCPP_ELAST ELAST 654278724Sdim#elif defined(__linux__) 655278724Sdim#define _LIBCPP_ELAST 4095 656278724Sdim#elif defined(_NEWLIB_VERSION) 657278724Sdim#define _LIBCPP_ELAST __ELASTERROR 658278724Sdim#elif defined(__APPLE__) 659278724Sdim// Not _LIBCPP_ELAST needed on Apple 660278724Sdim#elif defined(__sun__) 661278724Sdim#define _LIBCPP_ELAST ESTALE 662278724Sdim#else 663278724Sdim// Warn here so that the person doing the libcxx port has an easier time: 664278724Sdim#warning This platform's ELAST hasn't been ported yet 665227825Stheraven#endif 666227825Stheraven 667262801Sdim#ifndef _LIBCPP_TRIVIAL_PAIR_COPY_CTOR 668278724Sdim# if defined(__FreeBSD__) 669278724Sdim// Making the std::pair copy constructor trivial breaks ABI compatibility with 670278724Sdim// earlier versions of libc++ shipped by FreeBSD, so turn it off by default. 671278724Sdim// See also http://svnweb.freebsd.org/changeset/base/261801 672278724Sdim# define _LIBCPP_TRIVIAL_PAIR_COPY_CTOR 0 673278724Sdim# else 674278724Sdim# define _LIBCPP_TRIVIAL_PAIR_COPY_CTOR 1 675278724Sdim# endif 676262801Sdim#endif 677262801Sdim 678253159Stheraven#ifndef _LIBCPP_STD_VER 679253159Stheraven# if __cplusplus <= 201103L 680253159Stheraven# define _LIBCPP_STD_VER 11 681278724Sdim# elif __cplusplus <= 201402L 682278724Sdim# define _LIBCPP_STD_VER 14 683253159Stheraven# else 684278724Sdim# define _LIBCPP_STD_VER 15 // current year, or date of c++17 ratification 685253159Stheraven# endif 686253159Stheraven#endif // _LIBCPP_STD_VER 687253159Stheraven 688262801Sdim#if _LIBCPP_STD_VER > 11 689262801Sdim#define _LIBCPP_DEPRECATED [[deprecated]] 690227825Stheraven#else 691262801Sdim#define _LIBCPP_DEPRECATED 692227825Stheraven#endif 693227825Stheraven 694262801Sdim#if _LIBCPP_STD_VER <= 11 695262801Sdim#define _LIBCPP_EXPLICIT_AFTER_CXX11 696262801Sdim#define _LIBCPP_DEPRECATED_AFTER_CXX11 697262801Sdim#else 698262801Sdim#define _LIBCPP_EXPLICIT_AFTER_CXX11 explicit 699262801Sdim#define _LIBCPP_DEPRECATED_AFTER_CXX11 [[deprecated]] 700262801Sdim#endif 701262801Sdim 702278724Sdim#if _LIBCPP_STD_VER > 11 && !defined(_LIBCPP_HAS_NO_CXX14_CONSTEXPR) 703278724Sdim#define _LIBCPP_CONSTEXPR_AFTER_CXX11 constexpr 704278724Sdim#else 705278724Sdim#define _LIBCPP_CONSTEXPR_AFTER_CXX11 706278724Sdim#endif 707278724Sdim 708278724Sdim#ifndef _LIBCPP_HAS_NO_ASAN 709278724Sdimextern "C" void __sanitizer_annotate_contiguous_container( 710278724Sdim const void *, const void *, const void *, const void *); 711278724Sdim#endif 712278724Sdim 713262801Sdim// Try to find out if RTTI is disabled. 714262801Sdim// g++ and cl.exe have RTTI on by default and define a macro when it is. 715262801Sdim// g++ only defines the macro in 4.3.2 and onwards. 716262801Sdim#if !defined(_LIBCPP_NO_RTTI) 717278724Sdim# if defined(__GNUG__) && ((__GNUC__ >= 5) || (__GNUC__ == 4 && \ 718278724Sdim (__GNUC_MINOR__ >= 3 || __GNUC_PATCHLEVEL__ >= 2))) && !defined(__GXX_RTTI) 719262801Sdim# define _LIBCPP_NO_RTTI 720262801Sdim# elif (defined(_MSC_VER) && !defined(__clang__)) && !defined(_CPPRTTI) 721262801Sdim# define _LIBCPP_NO_RTTI 722262801Sdim# endif 723262801Sdim#endif 724262801Sdim 725262801Sdim#ifndef _LIBCPP_WEAK 726262801Sdim# define _LIBCPP_WEAK __attribute__((__weak__)) 727262801Sdim#endif 728262801Sdim 729278724Sdim#if defined(_LIBCPP_HAS_NO_MONOTONIC_CLOCK) && !defined(_LIBCPP_HAS_NO_THREADS) 730278724Sdim# error _LIBCPP_HAS_NO_MONOTONIC_CLOCK may only be defined when \ 731278724Sdim _LIBCPP_HAS_NO_THREADS is defined. 732278724Sdim#endif 733278724Sdim 734227825Stheraven#endif // _LIBCPP_CONFIG 735