__config revision 262801
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 22241903Sdim#define _LIBCPP_VERSION 1101 23241903Sdim 24227825Stheraven#define _LIBCPP_ABI_VERSION 1 25227825Stheraven 26227825Stheraven#define _LIBCPP_CONCAT1(_LIBCPP_X,_LIBCPP_Y) _LIBCPP_X##_LIBCPP_Y 27227825Stheraven#define _LIBCPP_CONCAT(_LIBCPP_X,_LIBCPP_Y) _LIBCPP_CONCAT1(_LIBCPP_X,_LIBCPP_Y) 28227825Stheraven 29227825Stheraven#define _LIBCPP_NAMESPACE _LIBCPP_CONCAT(__,_LIBCPP_ABI_VERSION) 30227825Stheraven 31227825Stheraven#ifdef __LITTLE_ENDIAN__ 32227825Stheraven#if __LITTLE_ENDIAN__ 33227825Stheraven#define _LIBCPP_LITTLE_ENDIAN 1 34227825Stheraven#define _LIBCPP_BIG_ENDIAN 0 35227825Stheraven#endif // __LITTLE_ENDIAN__ 36227825Stheraven#endif // __LITTLE_ENDIAN__ 37227825Stheraven 38227825Stheraven#ifdef __BIG_ENDIAN__ 39227825Stheraven#if __BIG_ENDIAN__ 40227825Stheraven#define _LIBCPP_LITTLE_ENDIAN 0 41227825Stheraven#define _LIBCPP_BIG_ENDIAN 1 42227825Stheraven#endif // __BIG_ENDIAN__ 43227825Stheraven#endif // __BIG_ENDIAN__ 44227825Stheraven 45227825Stheraven#ifdef __FreeBSD__ 46227825Stheraven# include <sys/endian.h> 47227825Stheraven# if _BYTE_ORDER == _LITTLE_ENDIAN 48227825Stheraven# define _LIBCPP_LITTLE_ENDIAN 1 49227825Stheraven# define _LIBCPP_BIG_ENDIAN 0 50227825Stheraven# else // _BYTE_ORDER == _LITTLE_ENDIAN 51227825Stheraven# define _LIBCPP_LITTLE_ENDIAN 0 52227825Stheraven# define _LIBCPP_BIG_ENDIAN 1 53227825Stheraven# endif // _BYTE_ORDER == _LITTLE_ENDIAN 54243572Sdim# ifndef __LONG_LONG_SUPPORTED 55243572Sdim# define _LIBCPP_HAS_NO_LONG_LONG 56243572Sdim# endif // __LONG_LONG_SUPPORTED 57227825Stheraven#endif // __FreeBSD__ 58227825Stheraven 59253159Stheraven#ifdef __NetBSD__ 60253159Stheraven# include <sys/endian.h> 61253159Stheraven# if _BYTE_ORDER == _LITTLE_ENDIAN 62253159Stheraven# define _LIBCPP_LITTLE_ENDIAN 1 63253159Stheraven# define _LIBCPP_BIG_ENDIAN 0 64253159Stheraven# else // _BYTE_ORDER == _LITTLE_ENDIAN 65253159Stheraven# define _LIBCPP_LITTLE_ENDIAN 0 66253159Stheraven# define _LIBCPP_BIG_ENDIAN 1 67253159Stheraven# endif // _BYTE_ORDER == _LITTLE_ENDIAN 68253159Stheraven# define _LIBCPP_HAS_QUICK_EXIT 69253159Stheraven#endif // __NetBSD__ 70253159Stheraven 71227825Stheraven#ifdef _WIN32 72227825Stheraven# define _LIBCPP_LITTLE_ENDIAN 1 73227825Stheraven# define _LIBCPP_BIG_ENDIAN 0 74227825Stheraven// Compiler intrinsics (GCC or MSVC) 75262801Sdim# if defined(__clang__) \ 76262801Sdim || (defined(_MSC_VER) && _MSC_VER >= 1400) \ 77241903Sdim || (defined(__GNUC__) && _GNUC_VER > 403) 78262801Sdim# define _LIBCPP_HAS_IS_BASE_OF 79227825Stheraven# endif 80262801Sdim# if defined(_MSC_VER) && !defined(__clang__) 81262801Sdim# define _LIBCPP_MSVC // Using Microsoft Visual C++ compiler 82262801Sdim# define _LIBCPP_TOSTRING2(x) #x 83262801Sdim# define _LIBCPP_TOSTRING(x) _LIBCPP_TOSTRING2(x) 84262801Sdim# define _LIBCPP_WARNING(x) __pragma(message(__FILE__ "(" _LIBCPP_TOSTRING(__LINE__) ") : warning note: " x)) 85262801Sdim# endif 86262801Sdim# // If mingw not explicitly detected, assume using MS C runtime only. 87262801Sdim# ifndef __MINGW32__ 88262801Sdim# define _LIBCPP_MSVCRT // Using Microsoft's C Runtime library 89262801Sdim# endif 90227825Stheraven#endif // _WIN32 91227825Stheraven 92246487Stheraven#ifdef __linux__ 93246487Stheraven# if defined(__GNUC__) && _GNUC_VER >= 403 94262801Sdim# define _LIBCPP_HAS_IS_BASE_OF 95246487Stheraven# endif 96246487Stheraven#endif 97246487Stheraven 98232950Stheraven#ifdef __sun__ 99232950Stheraven# include <sys/isa_defs.h> 100232950Stheraven# ifdef _LITTLE_ENDIAN 101232950Stheraven# define _LIBCPP_LITTLE_ENDIAN 1 102232950Stheraven# define _LIBCPP_BIG_ENDIAN 0 103232950Stheraven# else 104232950Stheraven# define _LIBCPP_LITTLE_ENDIAN 0 105232950Stheraven# define _LIBCPP_BIG_ENDIAN 1 106232950Stheraven# endif 107232950Stheraven#endif // __sun__ 108232950Stheraven 109227825Stheraven#if !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN) 110227825Stheraven# include <endian.h> 111227825Stheraven# if __BYTE_ORDER == __LITTLE_ENDIAN 112227825Stheraven# define _LIBCPP_LITTLE_ENDIAN 1 113227825Stheraven# define _LIBCPP_BIG_ENDIAN 0 114227825Stheraven# elif __BYTE_ORDER == __BIG_ENDIAN 115227825Stheraven# define _LIBCPP_LITTLE_ENDIAN 0 116227825Stheraven# define _LIBCPP_BIG_ENDIAN 1 117227825Stheraven# else // __BYTE_ORDER == __BIG_ENDIAN 118227825Stheraven# error unable to determine endian 119227825Stheraven# endif 120227825Stheraven#endif // !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN) 121227825Stheraven 122249998Sdim#ifdef _WIN32 123227825Stheraven 124227825Stheraven// only really useful for a DLL 125227825Stheraven#ifdef _LIBCPP_DLL // this should be a compiler builtin define ideally... 126227825Stheraven# ifdef cxx_EXPORTS 127227825Stheraven# define _LIBCPP_HIDDEN 128249998Sdim# define _LIBCPP_FUNC_VIS __declspec(dllexport) 129249998Sdim# define _LIBCPP_TYPE_VIS __declspec(dllexport) 130227825Stheraven# else 131227825Stheraven# define _LIBCPP_HIDDEN 132249998Sdim# define _LIBCPP_FUNC_VIS __declspec(dllimport) 133249998Sdim# define _LIBCPP_TYPE_VIS __declspec(dllimport) 134227825Stheraven# endif 135227825Stheraven#else 136227825Stheraven# define _LIBCPP_HIDDEN 137249998Sdim# define _LIBCPP_FUNC_VIS 138249998Sdim# define _LIBCPP_TYPE_VIS 139227825Stheraven#endif 140227825Stheraven 141262801Sdim#define _LIBCPP_TYPE_VIS_ONLY 142262801Sdim#define _LIBCPP_FUNC_VIS_ONLY 143262801Sdim 144227825Stheraven#ifndef _LIBCPP_INLINE_VISIBILITY 145262801Sdim# ifdef _LIBCPP_MSVC 146227825Stheraven# define _LIBCPP_INLINE_VISIBILITY __forceinline 147227825Stheraven# else // MinGW GCC and Clang 148227825Stheraven# define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__always_inline__)) 149227825Stheraven# endif 150227825Stheraven#endif 151227825Stheraven 152227825Stheraven#ifndef _LIBCPP_EXCEPTION_ABI 153249998Sdim#define _LIBCPP_EXCEPTION_ABI _LIBCPP_TYPE_VIS 154227825Stheraven#endif 155227825Stheraven 156227825Stheraven#ifndef _LIBCPP_ALWAYS_INLINE 157262801Sdim# ifdef _LIBCPP_MSVC 158227825Stheraven# define _LIBCPP_ALWAYS_INLINE __forceinline 159227825Stheraven# endif 160227825Stheraven#endif 161227825Stheraven 162227825Stheraven#endif // _WIN32 163227825Stheraven 164253159Stheraven#ifndef __has_attribute 165253159Stheraven#define __has_attribute(__x) 0 166253159Stheraven#endif 167253159Stheraven 168227825Stheraven#ifndef _LIBCPP_HIDDEN 169227825Stheraven#define _LIBCPP_HIDDEN __attribute__ ((__visibility__("hidden"))) 170227825Stheraven#endif 171227825Stheraven 172249998Sdim#ifndef _LIBCPP_FUNC_VIS 173249998Sdim#define _LIBCPP_FUNC_VIS __attribute__ ((__visibility__("default"))) 174227825Stheraven#endif 175227825Stheraven 176249998Sdim#ifndef _LIBCPP_TYPE_VIS 177262801Sdim# if __has_attribute(__type_visibility__) 178249998Sdim# define _LIBCPP_TYPE_VIS __attribute__ ((__type_visibility__("default"))) 179249998Sdim# else 180249998Sdim# define _LIBCPP_TYPE_VIS __attribute__ ((__visibility__("default"))) 181249998Sdim# endif 182249998Sdim#endif 183249998Sdim 184262801Sdim#ifndef _LIBCPP_TYPE_VIS_ONLY 185262801Sdim# define _LIBCPP_TYPE_VIS_ONLY _LIBCPP_TYPE_VIS 186262801Sdim#endif 187262801Sdim 188262801Sdim#ifndef _LIBCPP_FUNC_VIS_ONLY 189262801Sdim# define _LIBCPP_FUNC_VIS_ONLY _LIBCPP_FUNC_VIS 190262801Sdim#endif 191262801Sdim 192227825Stheraven#ifndef _LIBCPP_INLINE_VISIBILITY 193227825Stheraven#define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__visibility__("hidden"), __always_inline__)) 194227825Stheraven#endif 195227825Stheraven 196227825Stheraven#ifndef _LIBCPP_EXCEPTION_ABI 197249998Sdim#define _LIBCPP_EXCEPTION_ABI _LIBCPP_TYPE_VIS 198227825Stheraven#endif 199227825Stheraven 200227825Stheraven#ifndef _LIBCPP_ALWAYS_INLINE 201227825Stheraven#define _LIBCPP_ALWAYS_INLINE __attribute__ ((__visibility__("hidden"), __always_inline__)) 202227825Stheraven#endif 203227825Stheraven 204227825Stheraven#if defined(__clang__) 205227825Stheraven 206227825Stheraven#if __has_feature(cxx_alignas) 207241903Sdim# define _ALIGNAS_TYPE(x) alignas(x) 208227825Stheraven# define _ALIGNAS(x) alignas(x) 209227825Stheraven#else 210241903Sdim# define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x)))) 211227825Stheraven# define _ALIGNAS(x) __attribute__((__aligned__(x))) 212227825Stheraven#endif 213227825Stheraven 214227825Stheraven#if !__has_feature(cxx_alias_templates) 215227825Stheraven#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 216227825Stheraven#endif 217227825Stheraven 218227825Stheraven#ifndef __GXX_EXPERIMENTAL_CXX0X__ 219227825Stheraven#ifdef __linux__ 220227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS 221227825Stheraven#else 222227825Stheraventypedef __char16_t char16_t; 223227825Stheraventypedef __char32_t char32_t; 224227825Stheraven#endif 225227825Stheraven#endif 226227825Stheraven 227227825Stheraven#if !(__has_feature(cxx_exceptions)) 228227825Stheraven#define _LIBCPP_NO_EXCEPTIONS 229227825Stheraven#endif 230227825Stheraven 231227825Stheraven#if !(__has_feature(cxx_rtti)) 232227825Stheraven#define _LIBCPP_NO_RTTI 233227825Stheraven#endif 234227825Stheraven 235232950Stheraven#if !(__has_feature(cxx_strong_enums)) 236232950Stheraven#define _LIBCPP_HAS_NO_STRONG_ENUMS 237232950Stheraven#endif 238232950Stheraven 239227825Stheraven#if !(__has_feature(cxx_decltype)) 240227825Stheraven#define _LIBCPP_HAS_NO_DECLTYPE 241227825Stheraven#endif 242227825Stheraven 243227825Stheraven#if __has_feature(cxx_attributes) 244241903Sdim# define _LIBCPP_NORETURN [[noreturn]] 245227825Stheraven#else 246241903Sdim# define _LIBCPP_NORETURN __attribute__ ((noreturn)) 247227825Stheraven#endif 248227825Stheraven 249253159Stheraven#if !(__has_feature(cxx_defaulted_functions)) 250227825Stheraven#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 251253159Stheraven#endif // !(__has_feature(cxx_defaulted_functions)) 252227825Stheraven 253227825Stheraven#if !(__has_feature(cxx_deleted_functions)) 254227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 255227825Stheraven#endif // !(__has_feature(cxx_deleted_functions)) 256227825Stheraven 257227825Stheraven#if !(__has_feature(cxx_lambdas)) 258227825Stheraven#define _LIBCPP_HAS_NO_LAMBDAS 259227825Stheraven#endif 260227825Stheraven 261227825Stheraven#if !(__has_feature(cxx_nullptr)) 262227825Stheraven#define _LIBCPP_HAS_NO_NULLPTR 263227825Stheraven#endif 264227825Stheraven 265227825Stheraven#if !(__has_feature(cxx_rvalue_references)) 266227825Stheraven#define _LIBCPP_HAS_NO_RVALUE_REFERENCES 267227825Stheraven#endif 268227825Stheraven 269227825Stheraven#if !(__has_feature(cxx_static_assert)) 270227825Stheraven#define _LIBCPP_HAS_NO_STATIC_ASSERT 271227825Stheraven#endif 272227825Stheraven 273227825Stheraven#if !(__has_feature(cxx_auto_type)) 274227825Stheraven#define _LIBCPP_HAS_NO_AUTO_TYPE 275227825Stheraven#endif 276227825Stheraven 277227825Stheraven#if !(__has_feature(cxx_access_control_sfinae)) || !__has_feature(cxx_trailing_return) 278227825Stheraven#define _LIBCPP_HAS_NO_ADVANCED_SFINAE 279227825Stheraven#endif 280227825Stheraven 281227825Stheraven#if !(__has_feature(cxx_variadic_templates)) 282227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS 283227825Stheraven#endif 284227825Stheraven 285227825Stheraven#if !(__has_feature(cxx_trailing_return)) 286227825Stheraven#define _LIBCPP_HAS_NO_TRAILING_RETURN 287227825Stheraven#endif 288227825Stheraven 289227825Stheraven#if !(__has_feature(cxx_generalized_initializers)) 290227825Stheraven#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 291227825Stheraven#endif 292227825Stheraven 293227825Stheraven#if __has_feature(is_base_of) 294262801Sdim# define _LIBCPP_HAS_IS_BASE_OF 295227825Stheraven#endif 296227825Stheraven 297227825Stheraven// Objective-C++ features (opt-in) 298227825Stheraven#if __has_feature(objc_arc) 299227825Stheraven#define _LIBCPP_HAS_OBJC_ARC 300227825Stheraven#endif 301227825Stheraven 302227825Stheraven#if __has_feature(objc_arc_weak) 303227825Stheraven#define _LIBCPP_HAS_OBJC_ARC_WEAK 304232950Stheraven#define _LIBCPP_HAS_NO_STRONG_ENUMS 305227825Stheraven#endif 306227825Stheraven 307227825Stheraven#if !(__has_feature(cxx_constexpr)) 308227825Stheraven#define _LIBCPP_HAS_NO_CONSTEXPR 309227825Stheraven#endif 310227825Stheraven 311253159Stheraven#if __ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L 312253159Stheraven#if defined(__FreeBSD__) 313232972Stheraven#define _LIBCPP_HAS_QUICK_EXIT 314241903Sdim#define _LIBCPP_HAS_C11_FEATURES 315253159Stheraven#elif defined(__linux__) 316253159Stheraven#include <features.h> 317253159Stheraven#if __GLIBC_PREREQ(2, 15) 318253159Stheraven#define _LIBCPP_HAS_QUICK_EXIT 319232972Stheraven#endif 320253159Stheraven#if __GLIBC_PREREQ(2, 17) 321253159Stheraven#define _LIBCPP_HAS_C11_FEATURES 322253159Stheraven#endif 323253159Stheraven#endif 324253159Stheraven#endif 325232972Stheraven 326227825Stheraven#if (__has_feature(cxx_noexcept)) 327227825Stheraven# define _NOEXCEPT noexcept 328227825Stheraven# define _NOEXCEPT_(x) noexcept(x) 329227825Stheraven#else 330227825Stheraven# define _NOEXCEPT throw() 331227825Stheraven# define _NOEXCEPT_(x) 332227825Stheraven#endif 333227825Stheraven 334227825Stheraven#if __has_feature(underlying_type) 335227825Stheraven# define _LIBCXX_UNDERLYING_TYPE(T) __underlying_type(T) 336227825Stheraven#endif 337227825Stheraven 338227825Stheraven// Inline namespaces are available in Clang regardless of C++ dialect. 339227825Stheraven#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE { 340227825Stheraven#define _LIBCPP_END_NAMESPACE_STD } } 341227825Stheraven#define _VSTD std::_LIBCPP_NAMESPACE 342227825Stheraven 343227825Stheravennamespace std { 344227825Stheraven inline namespace _LIBCPP_NAMESPACE { 345227825Stheraven } 346227825Stheraven} 347227825Stheraven 348227825Stheraven#elif defined(__GNUC__) 349227825Stheraven 350227825Stheraven#define _ALIGNAS(x) __attribute__((__aligned__(x))) 351241903Sdim#define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x)))) 352227825Stheraven 353241903Sdim#define _LIBCPP_NORETURN __attribute__((noreturn)) 354227825Stheraven 355227825Stheraven#if !__EXCEPTIONS 356227825Stheraven#define _LIBCPP_NO_EXCEPTIONS 357227825Stheraven#endif 358227825Stheraven 359227825Stheraven#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 360227825Stheraven#define _LIBCPP_HAS_NO_CONSTEXPR 361227825Stheraven 362227825Stheraven#define _NOEXCEPT throw() 363227825Stheraven#define _NOEXCEPT_(x) 364227825Stheraven 365227825Stheraven#ifndef __GXX_EXPERIMENTAL_CXX0X__ 366227825Stheraven 367227825Stheraven#define _LIBCPP_HAS_NO_ADVANCED_SFINAE 368227825Stheraven#define _LIBCPP_HAS_NO_DECLTYPE 369227825Stheraven#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 370227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 371227825Stheraven#define _LIBCPP_HAS_NO_NULLPTR 372227825Stheraven#define _LIBCPP_HAS_NO_STATIC_ASSERT 373227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS 374227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS 375227825Stheraven#define _LIBCPP_HAS_NO_RVALUE_REFERENCES 376227825Stheraven#define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS 377227825Stheraven 378227825Stheraven#else // __GXX_EXPERIMENTAL_CXX0X__ 379227825Stheraven 380227825Stheraven#define _LIBCPP_HAS_NO_TRAILING_RETURN 381227825Stheraven#define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS 382227825Stheraven 383241903Sdim#if _GNUC_VER < 403 384227825Stheraven#define _LIBCPP_HAS_NO_RVALUE_REFERENCES 385227825Stheraven#endif 386227825Stheraven 387241903Sdim#if _GNUC_VER < 403 388227825Stheraven#define _LIBCPP_HAS_NO_STATIC_ASSERT 389227825Stheraven#endif 390227825Stheraven 391241903Sdim#if _GNUC_VER < 404 392227825Stheraven#define _LIBCPP_HAS_NO_ADVANCED_SFINAE 393227825Stheraven#define _LIBCPP_HAS_NO_DECLTYPE 394227825Stheraven#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 395227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 396227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS 397227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS 398227825Stheraven#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 399241903Sdim#endif // _GNUC_VER < 404 400227825Stheraven 401241903Sdim#if _GNUC_VER < 406 402227825Stheraven#define _LIBCPP_HAS_NO_NULLPTR 403227825Stheraven#endif 404227825Stheraven 405227825Stheraven#endif // __GXX_EXPERIMENTAL_CXX0X__ 406227825Stheraven 407227825Stheraven#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { namespace _LIBCPP_NAMESPACE { 408227825Stheraven#define _LIBCPP_END_NAMESPACE_STD } } 409227825Stheraven#define _VSTD std::_LIBCPP_NAMESPACE 410227825Stheraven 411227825Stheravennamespace std { 412227825Stheravennamespace _LIBCPP_NAMESPACE { 413227825Stheraven} 414227825Stheravenusing namespace _LIBCPP_NAMESPACE __attribute__((__strong__)); 415227825Stheraven} 416227825Stheraven 417262801Sdim#elif defined(_LIBCPP_MSVC) 418227825Stheraven 419227825Stheraven#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 420227825Stheraven#define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER 421227825Stheraven#define _LIBCPP_HAS_NO_CONSTEXPR 422227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS 423227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 424262801Sdim#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 425227825Stheraven#define __alignof__ __alignof 426241903Sdim#define _LIBCPP_NORETURN __declspec(noreturn) 427227825Stheraven#define _ALIGNAS(x) __declspec(align(x)) 428227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS 429227825Stheraven 430227825Stheraven#define _NOEXCEPT throw() 431227825Stheraven#define _NOEXCEPT_(x) 432227825Stheraven 433227825Stheraven#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { 434227825Stheraven#define _LIBCPP_END_NAMESPACE_STD } 435227825Stheraven#define _VSTD std 436227825Stheraven 437262801Sdim# define _LIBCPP_WEAK 438227825Stheravennamespace std { 439227825Stheraven} 440227825Stheraven 441262801Sdim#elif defined(__IBMCPP__) 442227825Stheraven 443262801Sdim#define _ALIGNAS(x) __attribute__((__aligned__(x))) 444262801Sdim#define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x)))) 445262801Sdim#define _ATTRIBUTE(x) __attribute__((x)) 446262801Sdim#define _LIBCPP_NORETURN __attribute__((noreturn)) 447262801Sdim 448262801Sdim#define _NOEXCEPT throw() 449262801Sdim#define _NOEXCEPT_(x) 450262801Sdim 451262801Sdim#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 452262801Sdim#define _LIBCPP_HAS_NO_ADVANCED_SFINAE 453262801Sdim#define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS 454262801Sdim#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 455262801Sdim#define _LIBCPP_HAS_NO_NULLPTR 456262801Sdim#define _LIBCPP_HAS_NO_UNICODE_CHARS 457262801Sdim#define _LIBCPP_HAS_NO_STRONG_ENUMS 458262801Sdim#define _LIBCPP_HAS_IS_BASE_OF 459262801Sdim 460262801Sdim#if defined(_AIX) 461262801Sdim#define __MULTILOCALE_API 462262801Sdim#endif 463262801Sdim 464262801Sdim#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE { 465262801Sdim#define _LIBCPP_END_NAMESPACE_STD } } 466262801Sdim#define _VSTD std::_LIBCPP_NAMESPACE 467262801Sdim 468262801Sdimnamespace std { 469262801Sdim inline namespace _LIBCPP_NAMESPACE { 470262801Sdim } 471262801Sdim} 472262801Sdim 473262801Sdim#endif // __clang__ || __GNUC___ || _MSC_VER || __IBMCPP__ 474262801Sdim 475227825Stheraven#ifdef _LIBCPP_HAS_NO_UNICODE_CHARS 476227825Stheraventypedef unsigned short char16_t; 477227825Stheraventypedef unsigned int char32_t; 478227825Stheraven#endif // _LIBCPP_HAS_NO_UNICODE_CHARS 479227825Stheraven 480227825Stheraven#ifdef _LIBCPP_HAS_NO_STATIC_ASSERT 481227825Stheraven 482227825Stheraventemplate <bool> struct __static_assert_test; 483227825Stheraventemplate <> struct __static_assert_test<true> {}; 484227825Stheraventemplate <unsigned> struct __static_assert_check {}; 485227825Stheraven#define static_assert(__b, __m) \ 486227825Stheraven typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \ 487227825Stheraven _LIBCPP_CONCAT(__t, __LINE__) 488227825Stheraven 489227825Stheraven#endif // _LIBCPP_HAS_NO_STATIC_ASSERT 490227825Stheraven 491227825Stheraven#ifdef _LIBCPP_HAS_NO_DECLTYPE 492227825Stheraven#define decltype(x) __typeof__(x) 493227825Stheraven#endif 494227825Stheraven 495227825Stheraven#ifdef _LIBCPP_HAS_NO_CONSTEXPR 496234976Stheraven#define _LIBCPP_CONSTEXPR 497234976Stheraven#else 498234976Stheraven#define _LIBCPP_CONSTEXPR constexpr 499227825Stheraven#endif 500227825Stheraven 501253159Stheraven#ifdef _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 502253159Stheraven#define _LIBCPP_DEFAULT {} 503253159Stheraven#else 504253159Stheraven#define _LIBCPP_DEFAULT = default; 505253159Stheraven#endif 506253159Stheraven 507241903Sdim#ifdef __GNUC__ 508253159Stheraven#define _NOALIAS __attribute__((__malloc__)) 509241903Sdim#else 510241903Sdim#define _NOALIAS 511241903Sdim#endif 512241903Sdim 513227825Stheraven#ifndef __has_feature 514227825Stheraven#define __has_feature(__x) 0 515227825Stheraven#endif 516227825Stheraven 517232950Stheraven#if __has_feature(cxx_explicit_conversions) 518232950Stheraven# define _LIBCPP_EXPLICIT explicit 519232950Stheraven#else 520232950Stheraven# define _LIBCPP_EXPLICIT 521232950Stheraven#endif 522232950Stheraven 523232950Stheraven#ifdef _LIBCPP_HAS_NO_STRONG_ENUMS 524249998Sdim#define _LIBCPP_DECLARE_STRONG_ENUM(x) struct _LIBCPP_TYPE_VIS x { enum __lx 525232950Stheraven#define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) \ 526242945Stheraven __lx __v_; \ 527242945Stheraven _LIBCPP_ALWAYS_INLINE x(__lx __v) : __v_(__v) {} \ 528242945Stheraven _LIBCPP_ALWAYS_INLINE explicit x(int __v) : __v_(static_cast<__lx>(__v)) {} \ 529232950Stheraven _LIBCPP_ALWAYS_INLINE operator int() const {return __v_;} \ 530232950Stheraven }; 531232950Stheraven#else // _LIBCPP_HAS_NO_STRONG_ENUMS 532249998Sdim#define _LIBCPP_DECLARE_STRONG_ENUM(x) enum class _LIBCPP_TYPE_VIS x 533232950Stheraven#define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) 534232950Stheraven#endif // _LIBCPP_HAS_NO_STRONG_ENUMS 535232950Stheraven 536262801Sdim#ifdef _LIBCPP_DEBUG 537262801Sdim# if _LIBCPP_DEBUG == 0 538262801Sdim# define _LIBCPP_DEBUG_LEVEL 1 539262801Sdim# elif _LIBCPP_DEBUG == 1 540262801Sdim# define _LIBCPP_DEBUG_LEVEL 2 541262801Sdim# else 542262801Sdim# error Supported values for _LIBCPP_DEBUG are 0 and 1 543262801Sdim# endif 544262801Sdim# define _LIBCPP_EXTERN_TEMPLATE(...) 545262801Sdim#endif 546262801Sdim 547242945Stheraven#ifndef _LIBCPP_EXTERN_TEMPLATE 548262801Sdim#define _LIBCPP_EXTERN_TEMPLATE(...) 549242945Stheraven#endif 550242945Stheraven 551262801Sdim#ifndef _LIBCPP_EXTERN_TEMPLATE2 552262801Sdim#define _LIBCPP_EXTERN_TEMPLATE2(...) extern template __VA_ARGS__; 553262801Sdim#endif 554262801Sdim 555253159Stheraven#if defined(__APPLE__) || defined(__FreeBSD__) || defined(_WIN32) || defined(__sun__) || defined(__NetBSD__) 556227825Stheraven#define _LIBCPP_LOCALE__L_EXTENSIONS 1 557227825Stheraven#endif 558249998Sdim#ifdef __FreeBSD__ 559227825Stheraven#define _DECLARE_C99_LDBL_MATH 1 560227825Stheraven#endif 561227825Stheraven 562249998Sdim#if defined(__APPLE__) || defined(__FreeBSD__) 563227825Stheraven#define _LIBCPP_HAS_DEFAULTRUNELOCALE 564227825Stheraven#endif 565227825Stheraven 566249998Sdim#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__sun__) 567227825Stheraven#define _LIBCPP_WCTYPE_IS_MASK 568227825Stheraven#endif 569227825Stheraven 570262801Sdim#if defined(__APPLE__) || defined(__FreeBSD__) 571262801Sdim#ifndef _LIBCPP_TRIVIAL_PAIR_COPY_CTOR 572262801Sdim# define _LIBCPP_TRIVIAL_PAIR_COPY_CTOR 0 573227825Stheraven#endif 574262801Sdim#endif 575227825Stheraven 576262801Sdim#ifndef _LIBCPP_TRIVIAL_PAIR_COPY_CTOR 577262801Sdim# define _LIBCPP_TRIVIAL_PAIR_COPY_CTOR 1 578262801Sdim#endif 579262801Sdim 580253159Stheraven#ifndef _LIBCPP_STD_VER 581253159Stheraven# if __cplusplus <= 201103L 582253159Stheraven# define _LIBCPP_STD_VER 11 583253159Stheraven# else 584253159Stheraven# define _LIBCPP_STD_VER 13 // current year, or date of c++14 ratification 585253159Stheraven# endif 586253159Stheraven#endif // _LIBCPP_STD_VER 587253159Stheraven 588262801Sdim#if _LIBCPP_STD_VER > 11 589262801Sdim#define _LIBCPP_DEPRECATED [[deprecated]] 590227825Stheraven#else 591262801Sdim#define _LIBCPP_DEPRECATED 592227825Stheraven#endif 593227825Stheraven 594262801Sdim#if _LIBCPP_STD_VER <= 11 595262801Sdim#define _LIBCPP_CONSTEXPR_AFTER_CXX11 596262801Sdim#define _LIBCPP_EXPLICIT_AFTER_CXX11 597262801Sdim#define _LIBCPP_DEPRECATED_AFTER_CXX11 598262801Sdim#else 599262801Sdim#define _LIBCPP_CONSTEXPR_AFTER_CXX11 constexpr 600262801Sdim#define _LIBCPP_EXPLICIT_AFTER_CXX11 explicit 601262801Sdim#define _LIBCPP_DEPRECATED_AFTER_CXX11 [[deprecated]] 602262801Sdim#endif 603262801Sdim 604262801Sdim// Try to find out if RTTI is disabled. 605262801Sdim// g++ and cl.exe have RTTI on by default and define a macro when it is. 606262801Sdim// g++ only defines the macro in 4.3.2 and onwards. 607262801Sdim#if !defined(_LIBCPP_NO_RTTI) 608262801Sdim# if defined(__GNUG__) && (__GNUC__ >= 4 && \ 609262801Sdim (__GNUC_MINOR__ >= 3 || __GNUC_PATCHLEVEL__ >= 2)) && !defined(__GXX_RTTI) 610262801Sdim# define _LIBCPP_NO_RTTI 611262801Sdim# elif (defined(_MSC_VER) && !defined(__clang__)) && !defined(_CPPRTTI) 612262801Sdim# define _LIBCPP_NO_RTTI 613262801Sdim# endif 614262801Sdim#endif 615262801Sdim 616262801Sdim#ifndef _LIBCPP_WEAK 617262801Sdim# define _LIBCPP_WEAK __attribute__((__weak__)) 618262801Sdim#endif 619262801Sdim 620227825Stheraven#endif // _LIBCPP_CONFIG 621