__config revision 253159
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 14249998Sdim#ifndef _MSC_VER // explicit macro necessary because it is only defined below in this file 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) 75241903Sdim# if (defined(_MSC_VER) && _MSC_VER >= 1400) \ 76241903Sdim || (defined(__GNUC__) && _GNUC_VER > 403) 77227825Stheraven# define _LIBCP_HAS_IS_BASE_OF 78227825Stheraven# endif 79227825Stheraven#endif // _WIN32 80227825Stheraven 81246487Stheraven#ifdef __linux__ 82246487Stheraven# if defined(__GNUC__) && _GNUC_VER >= 403 83246487Stheraven# define _LIBCP_HAS_IS_BASE_OF 84246487Stheraven# endif 85246487Stheraven#endif 86246487Stheraven 87232950Stheraven#ifdef __sun__ 88232950Stheraven# include <sys/isa_defs.h> 89232950Stheraven# ifdef _LITTLE_ENDIAN 90232950Stheraven# define _LIBCPP_LITTLE_ENDIAN 1 91232950Stheraven# define _LIBCPP_BIG_ENDIAN 0 92232950Stheraven# else 93232950Stheraven# define _LIBCPP_LITTLE_ENDIAN 0 94232950Stheraven# define _LIBCPP_BIG_ENDIAN 1 95232950Stheraven# endif 96232950Stheraven#endif // __sun__ 97232950Stheraven 98227825Stheraven#if !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN) 99227825Stheraven# include <endian.h> 100227825Stheraven# if __BYTE_ORDER == __LITTLE_ENDIAN 101227825Stheraven# define _LIBCPP_LITTLE_ENDIAN 1 102227825Stheraven# define _LIBCPP_BIG_ENDIAN 0 103227825Stheraven# elif __BYTE_ORDER == __BIG_ENDIAN 104227825Stheraven# define _LIBCPP_LITTLE_ENDIAN 0 105227825Stheraven# define _LIBCPP_BIG_ENDIAN 1 106227825Stheraven# else // __BYTE_ORDER == __BIG_ENDIAN 107227825Stheraven# error unable to determine endian 108227825Stheraven# endif 109227825Stheraven#endif // !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN) 110227825Stheraven 111249998Sdim#ifdef _WIN32 112227825Stheraven 113227825Stheraven// only really useful for a DLL 114227825Stheraven#ifdef _LIBCPP_DLL // this should be a compiler builtin define ideally... 115227825Stheraven# ifdef cxx_EXPORTS 116227825Stheraven# define _LIBCPP_HIDDEN 117249998Sdim# define _LIBCPP_FUNC_VIS __declspec(dllexport) 118249998Sdim# define _LIBCPP_TYPE_VIS __declspec(dllexport) 119227825Stheraven# else 120227825Stheraven# define _LIBCPP_HIDDEN 121249998Sdim# define _LIBCPP_FUNC_VIS __declspec(dllimport) 122249998Sdim# define _LIBCPP_TYPE_VIS __declspec(dllimport) 123227825Stheraven# endif 124227825Stheraven#else 125227825Stheraven# define _LIBCPP_HIDDEN 126249998Sdim# define _LIBCPP_FUNC_VIS 127249998Sdim# define _LIBCPP_TYPE_VIS 128227825Stheraven#endif 129227825Stheraven 130227825Stheraven#ifndef _LIBCPP_INLINE_VISIBILITY 131249998Sdim# ifdef _MSC_VER 132227825Stheraven# define _LIBCPP_INLINE_VISIBILITY __forceinline 133227825Stheraven# else // MinGW GCC and Clang 134227825Stheraven# define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__always_inline__)) 135227825Stheraven# endif 136227825Stheraven#endif 137227825Stheraven 138227825Stheraven#ifndef _LIBCPP_EXCEPTION_ABI 139249998Sdim#define _LIBCPP_EXCEPTION_ABI _LIBCPP_TYPE_VIS 140227825Stheraven#endif 141227825Stheraven 142227825Stheraven#ifndef _LIBCPP_ALWAYS_INLINE 143249998Sdim# ifdef _MSC_VER 144227825Stheraven# define _LIBCPP_ALWAYS_INLINE __forceinline 145227825Stheraven# endif 146227825Stheraven#endif 147227825Stheraven 148227825Stheraven#endif // _WIN32 149227825Stheraven 150253159Stheraven#ifndef __has_attribute 151253159Stheraven#define __has_attribute(__x) 0 152253159Stheraven#endif 153253159Stheraven 154227825Stheraven#ifndef _LIBCPP_HIDDEN 155227825Stheraven#define _LIBCPP_HIDDEN __attribute__ ((__visibility__("hidden"))) 156227825Stheraven#endif 157227825Stheraven 158249998Sdim#ifndef _LIBCPP_FUNC_VIS 159249998Sdim#define _LIBCPP_FUNC_VIS __attribute__ ((__visibility__("default"))) 160227825Stheraven#endif 161227825Stheraven 162249998Sdim#ifndef _LIBCPP_TYPE_VIS 163249998Sdim# if __has_attribute(type_visibility) 164249998Sdim# define _LIBCPP_TYPE_VIS __attribute__ ((__type_visibility__("default"))) 165249998Sdim# else 166249998Sdim# define _LIBCPP_TYPE_VIS __attribute__ ((__visibility__("default"))) 167249998Sdim# endif 168249998Sdim#endif 169249998Sdim 170227825Stheraven#ifndef _LIBCPP_INLINE_VISIBILITY 171227825Stheraven#define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__visibility__("hidden"), __always_inline__)) 172227825Stheraven#endif 173227825Stheraven 174227825Stheraven#ifndef _LIBCPP_EXCEPTION_ABI 175249998Sdim#define _LIBCPP_EXCEPTION_ABI _LIBCPP_TYPE_VIS 176227825Stheraven#endif 177227825Stheraven 178227825Stheraven#ifndef _LIBCPP_CANTTHROW 179227825Stheraven#define _LIBCPP_CANTTHROW __attribute__ ((__nothrow__)) 180227825Stheraven#endif 181227825Stheraven 182227825Stheraven#ifndef _LIBCPP_ALWAYS_INLINE 183227825Stheraven#define _LIBCPP_ALWAYS_INLINE __attribute__ ((__visibility__("hidden"), __always_inline__)) 184227825Stheraven#endif 185227825Stheraven 186227825Stheraven#if defined(__clang__) 187227825Stheraven 188227825Stheraven#if __has_feature(cxx_alignas) 189241903Sdim# define _ALIGNAS_TYPE(x) alignas(x) 190227825Stheraven# define _ALIGNAS(x) alignas(x) 191227825Stheraven#else 192241903Sdim# define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x)))) 193227825Stheraven# define _ALIGNAS(x) __attribute__((__aligned__(x))) 194227825Stheraven#endif 195227825Stheraven 196227825Stheraven#if !__has_feature(cxx_alias_templates) 197227825Stheraven#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 198227825Stheraven#endif 199227825Stheraven 200227825Stheraven#ifndef __GXX_EXPERIMENTAL_CXX0X__ 201227825Stheraven#ifdef __linux__ 202227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS 203227825Stheraven#else 204227825Stheraventypedef __char16_t char16_t; 205227825Stheraventypedef __char32_t char32_t; 206227825Stheraven#endif 207227825Stheraven#endif 208227825Stheraven 209227825Stheraven#if !(__has_feature(cxx_exceptions)) 210227825Stheraven#define _LIBCPP_NO_EXCEPTIONS 211227825Stheraven#endif 212227825Stheraven 213227825Stheraven#if !(__has_feature(cxx_rtti)) 214227825Stheraven#define _LIBCPP_NO_RTTI 215227825Stheraven#endif 216227825Stheraven 217232950Stheraven#if !(__has_feature(cxx_strong_enums)) 218232950Stheraven#define _LIBCPP_HAS_NO_STRONG_ENUMS 219232950Stheraven#endif 220232950Stheraven 221227825Stheraven#if !(__has_feature(cxx_decltype)) 222227825Stheraven#define _LIBCPP_HAS_NO_DECLTYPE 223227825Stheraven#endif 224227825Stheraven 225227825Stheraven#if __has_feature(cxx_attributes) 226241903Sdim# define _LIBCPP_NORETURN [[noreturn]] 227227825Stheraven#else 228241903Sdim# define _LIBCPP_NORETURN __attribute__ ((noreturn)) 229227825Stheraven#endif 230227825Stheraven 231253159Stheraven#if !(__has_feature(cxx_defaulted_functions)) 232227825Stheraven#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 233253159Stheraven#endif // !(__has_feature(cxx_defaulted_functions)) 234227825Stheraven 235227825Stheraven#if !(__has_feature(cxx_deleted_functions)) 236227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 237227825Stheraven#endif // !(__has_feature(cxx_deleted_functions)) 238227825Stheraven 239227825Stheraven#if !(__has_feature(cxx_lambdas)) 240227825Stheraven#define _LIBCPP_HAS_NO_LAMBDAS 241227825Stheraven#endif 242227825Stheraven 243227825Stheraven#if !(__has_feature(cxx_nullptr)) 244227825Stheraven#define _LIBCPP_HAS_NO_NULLPTR 245227825Stheraven#endif 246227825Stheraven 247227825Stheraven#if !(__has_feature(cxx_rvalue_references)) 248227825Stheraven#define _LIBCPP_HAS_NO_RVALUE_REFERENCES 249227825Stheraven#endif 250227825Stheraven 251227825Stheraven#if !(__has_feature(cxx_static_assert)) 252227825Stheraven#define _LIBCPP_HAS_NO_STATIC_ASSERT 253227825Stheraven#endif 254227825Stheraven 255227825Stheraven#if !(__has_feature(cxx_auto_type)) 256227825Stheraven#define _LIBCPP_HAS_NO_AUTO_TYPE 257227825Stheraven#endif 258227825Stheraven 259227825Stheraven#if !(__has_feature(cxx_access_control_sfinae)) || !__has_feature(cxx_trailing_return) 260227825Stheraven#define _LIBCPP_HAS_NO_ADVANCED_SFINAE 261227825Stheraven#endif 262227825Stheraven 263227825Stheraven#if !(__has_feature(cxx_variadic_templates)) 264227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS 265227825Stheraven#endif 266227825Stheraven 267227825Stheraven#if !(__has_feature(cxx_trailing_return)) 268227825Stheraven#define _LIBCPP_HAS_NO_TRAILING_RETURN 269227825Stheraven#endif 270227825Stheraven 271227825Stheraven#if !(__has_feature(cxx_generalized_initializers)) 272227825Stheraven#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 273227825Stheraven#endif 274227825Stheraven 275227825Stheraven#if __has_feature(is_base_of) 276227825Stheraven# define _LIBCP_HAS_IS_BASE_OF 277227825Stheraven#endif 278227825Stheraven 279227825Stheraven// Objective-C++ features (opt-in) 280227825Stheraven#if __has_feature(objc_arc) 281227825Stheraven#define _LIBCPP_HAS_OBJC_ARC 282227825Stheraven#endif 283227825Stheraven 284227825Stheraven#if __has_feature(objc_arc_weak) 285227825Stheraven#define _LIBCPP_HAS_OBJC_ARC_WEAK 286232950Stheraven#define _LIBCPP_HAS_NO_STRONG_ENUMS 287227825Stheraven#endif 288227825Stheraven 289227825Stheraven#if !(__has_feature(cxx_constexpr)) 290227825Stheraven#define _LIBCPP_HAS_NO_CONSTEXPR 291227825Stheraven#endif 292227825Stheraven 293253159Stheraven#if __ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L 294253159Stheraven#if defined(__FreeBSD__) 295232972Stheraven#define _LIBCPP_HAS_QUICK_EXIT 296241903Sdim#define _LIBCPP_HAS_C11_FEATURES 297253159Stheraven#elif defined(__linux__) 298253159Stheraven#include <features.h> 299253159Stheraven#if __GLIBC_PREREQ(2, 15) 300253159Stheraven#define _LIBCPP_HAS_QUICK_EXIT 301232972Stheraven#endif 302253159Stheraven#if __GLIBC_PREREQ(2, 17) 303253159Stheraven#define _LIBCPP_HAS_C11_FEATURES 304253159Stheraven#endif 305253159Stheraven#endif 306253159Stheraven#endif 307232972Stheraven 308227825Stheraven#if (__has_feature(cxx_noexcept)) 309227825Stheraven# define _NOEXCEPT noexcept 310227825Stheraven# define _NOEXCEPT_(x) noexcept(x) 311227825Stheraven#else 312227825Stheraven# define _NOEXCEPT throw() 313227825Stheraven# define _NOEXCEPT_(x) 314227825Stheraven#endif 315227825Stheraven 316227825Stheraven#if __has_feature(underlying_type) 317227825Stheraven# define _LIBCXX_UNDERLYING_TYPE(T) __underlying_type(T) 318227825Stheraven#endif 319227825Stheraven 320227825Stheraven// Inline namespaces are available in Clang regardless of C++ dialect. 321227825Stheraven#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE { 322227825Stheraven#define _LIBCPP_END_NAMESPACE_STD } } 323227825Stheraven#define _VSTD std::_LIBCPP_NAMESPACE 324227825Stheraven 325227825Stheravennamespace std { 326227825Stheraven inline namespace _LIBCPP_NAMESPACE { 327227825Stheraven } 328227825Stheraven} 329227825Stheraven 330227825Stheraven#elif defined(__GNUC__) 331227825Stheraven 332227825Stheraven#define _ALIGNAS(x) __attribute__((__aligned__(x))) 333241903Sdim#define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x)))) 334227825Stheraven 335241903Sdim#define _LIBCPP_NORETURN __attribute__((noreturn)) 336227825Stheraven 337227825Stheraven#if !__EXCEPTIONS 338227825Stheraven#define _LIBCPP_NO_EXCEPTIONS 339227825Stheraven#endif 340227825Stheraven 341227825Stheraven#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 342227825Stheraven#define _LIBCPP_HAS_NO_CONSTEXPR 343227825Stheraven 344227825Stheraven#define _NOEXCEPT throw() 345227825Stheraven#define _NOEXCEPT_(x) 346227825Stheraven 347227825Stheraven#ifndef __GXX_EXPERIMENTAL_CXX0X__ 348227825Stheraven 349227825Stheraven#define _LIBCPP_HAS_NO_ADVANCED_SFINAE 350227825Stheraven#define _LIBCPP_HAS_NO_DECLTYPE 351227825Stheraven#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 352227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 353227825Stheraven#define _LIBCPP_HAS_NO_NULLPTR 354227825Stheraven#define _LIBCPP_HAS_NO_STATIC_ASSERT 355227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS 356227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS 357227825Stheraven#define _LIBCPP_HAS_NO_RVALUE_REFERENCES 358227825Stheraven#define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS 359227825Stheraven 360227825Stheraven#else // __GXX_EXPERIMENTAL_CXX0X__ 361227825Stheraven 362227825Stheraven#define _LIBCPP_HAS_NO_TRAILING_RETURN 363227825Stheraven#define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS 364227825Stheraven 365241903Sdim#if _GNUC_VER < 403 366227825Stheraven#define _LIBCPP_HAS_NO_RVALUE_REFERENCES 367227825Stheraven#endif 368227825Stheraven 369241903Sdim#if _GNUC_VER < 403 370227825Stheraven#define _LIBCPP_HAS_NO_STATIC_ASSERT 371227825Stheraven#endif 372227825Stheraven 373241903Sdim#if _GNUC_VER < 404 374227825Stheraven#define _LIBCPP_HAS_NO_ADVANCED_SFINAE 375227825Stheraven#define _LIBCPP_HAS_NO_DECLTYPE 376227825Stheraven#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 377227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 378227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS 379227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS 380227825Stheraven#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 381241903Sdim#endif // _GNUC_VER < 404 382227825Stheraven 383241903Sdim#if _GNUC_VER < 406 384227825Stheraven#define _LIBCPP_HAS_NO_NULLPTR 385227825Stheraven#endif 386227825Stheraven 387227825Stheraven#endif // __GXX_EXPERIMENTAL_CXX0X__ 388227825Stheraven 389227825Stheraven#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { namespace _LIBCPP_NAMESPACE { 390227825Stheraven#define _LIBCPP_END_NAMESPACE_STD } } 391227825Stheraven#define _VSTD std::_LIBCPP_NAMESPACE 392227825Stheraven 393227825Stheravennamespace std { 394227825Stheravennamespace _LIBCPP_NAMESPACE { 395227825Stheraven} 396227825Stheravenusing namespace _LIBCPP_NAMESPACE __attribute__((__strong__)); 397227825Stheraven} 398227825Stheraven 399227825Stheraven#elif defined(_MSC_VER) 400227825Stheraven 401227825Stheraven#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 402227825Stheraven#define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER 403227825Stheraven#define _LIBCPP_HAS_NO_CONSTEXPR 404227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS 405227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 406227825Stheraven#define __alignof__ __alignof 407241903Sdim#define _LIBCPP_NORETURN __declspec(noreturn) 408227825Stheraven#define _ALIGNAS(x) __declspec(align(x)) 409227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS 410227825Stheraven 411227825Stheraven#define _NOEXCEPT throw() 412227825Stheraven#define _NOEXCEPT_(x) 413227825Stheraven 414227825Stheraven#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { 415227825Stheraven#define _LIBCPP_END_NAMESPACE_STD } 416227825Stheraven#define _VSTD std 417227825Stheraven 418227825Stheravennamespace std { 419227825Stheraven} 420227825Stheraven 421227825Stheraven#endif // __clang__ || __GNUC___ || _MSC_VER 422227825Stheraven 423227825Stheraven#ifdef _LIBCPP_HAS_NO_UNICODE_CHARS 424227825Stheraventypedef unsigned short char16_t; 425227825Stheraventypedef unsigned int char32_t; 426227825Stheraven#endif // _LIBCPP_HAS_NO_UNICODE_CHARS 427227825Stheraven 428227825Stheraven#ifdef _LIBCPP_HAS_NO_STATIC_ASSERT 429227825Stheraven 430227825Stheraventemplate <bool> struct __static_assert_test; 431227825Stheraventemplate <> struct __static_assert_test<true> {}; 432227825Stheraventemplate <unsigned> struct __static_assert_check {}; 433227825Stheraven#define static_assert(__b, __m) \ 434227825Stheraven typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \ 435227825Stheraven _LIBCPP_CONCAT(__t, __LINE__) 436227825Stheraven 437227825Stheraven#endif // _LIBCPP_HAS_NO_STATIC_ASSERT 438227825Stheraven 439227825Stheraven#ifdef _LIBCPP_HAS_NO_DECLTYPE 440227825Stheraven#define decltype(x) __typeof__(x) 441227825Stheraven#endif 442227825Stheraven 443227825Stheraven#ifdef _LIBCPP_HAS_NO_CONSTEXPR 444234976Stheraven#define _LIBCPP_CONSTEXPR 445234976Stheraven#else 446234976Stheraven#define _LIBCPP_CONSTEXPR constexpr 447227825Stheraven#endif 448227825Stheraven 449253159Stheraven#ifdef _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 450253159Stheraven#define _LIBCPP_DEFAULT {} 451253159Stheraven#else 452253159Stheraven#define _LIBCPP_DEFAULT = default; 453253159Stheraven#endif 454253159Stheraven 455241903Sdim#ifdef __GNUC__ 456253159Stheraven#define _NOALIAS __attribute__((__malloc__)) 457241903Sdim#else 458241903Sdim#define _NOALIAS 459241903Sdim#endif 460241903Sdim 461227825Stheraven#ifndef __has_feature 462227825Stheraven#define __has_feature(__x) 0 463227825Stheraven#endif 464227825Stheraven 465232950Stheraven#if __has_feature(cxx_explicit_conversions) 466232950Stheraven# define _LIBCPP_EXPLICIT explicit 467232950Stheraven#else 468232950Stheraven# define _LIBCPP_EXPLICIT 469232950Stheraven#endif 470232950Stheraven 471232950Stheraven#ifdef _LIBCPP_HAS_NO_STRONG_ENUMS 472249998Sdim#define _LIBCPP_DECLARE_STRONG_ENUM(x) struct _LIBCPP_TYPE_VIS x { enum __lx 473232950Stheraven#define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) \ 474242945Stheraven __lx __v_; \ 475242945Stheraven _LIBCPP_ALWAYS_INLINE x(__lx __v) : __v_(__v) {} \ 476242945Stheraven _LIBCPP_ALWAYS_INLINE explicit x(int __v) : __v_(static_cast<__lx>(__v)) {} \ 477232950Stheraven _LIBCPP_ALWAYS_INLINE operator int() const {return __v_;} \ 478232950Stheraven }; 479232950Stheraven#else // _LIBCPP_HAS_NO_STRONG_ENUMS 480249998Sdim#define _LIBCPP_DECLARE_STRONG_ENUM(x) enum class _LIBCPP_TYPE_VIS x 481232950Stheraven#define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) 482232950Stheraven#endif // _LIBCPP_HAS_NO_STRONG_ENUMS 483232950Stheraven 484242945Stheraven#ifndef _LIBCPP_EXTERN_TEMPLATE 485242945Stheraven#define _LIBCPP_EXTERN_TEMPLATE(...) extern template __VA_ARGS__; 486242945Stheraven#endif 487242945Stheraven 488253159Stheraven#if defined(__APPLE__) || defined(__FreeBSD__) || defined(_WIN32) || defined(__sun__) || defined(__NetBSD__) 489227825Stheraven#define _LIBCPP_LOCALE__L_EXTENSIONS 1 490227825Stheraven#endif 491249998Sdim#ifdef __FreeBSD__ 492227825Stheraven#define _DECLARE_C99_LDBL_MATH 1 493227825Stheraven#endif 494227825Stheraven 495249998Sdim#if defined(__APPLE__) || defined(__FreeBSD__) 496227825Stheraven#define _LIBCPP_HAS_DEFAULTRUNELOCALE 497227825Stheraven#endif 498227825Stheraven 499249998Sdim#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__sun__) 500227825Stheraven#define _LIBCPP_WCTYPE_IS_MASK 501227825Stheraven#endif 502227825Stheraven 503227825Stheraven#ifdef _LIBCPP_DEBUG2 504227825Stheraven# if _LIBCPP_DEBUG2 == 0 505227825Stheraven# define _LIBCPP_DEBUG_LEVEL 1 506227825Stheraven# elif _LIBCPP_DEBUG2 == 1 507227825Stheraven# define _LIBCPP_DEBUG_LEVEL 2 508227825Stheraven# else 509227825Stheraven# error Supported values for _LIBCPP_DEBUG2 are 0 and 1 510227825Stheraven# endif 511227825Stheraven#endif 512227825Stheraven 513253159Stheraven#ifndef _LIBCPP_STD_VER 514253159Stheraven# if __cplusplus <= 201103L 515253159Stheraven# define _LIBCPP_STD_VER 11 516253159Stheraven# else 517253159Stheraven# define _LIBCPP_STD_VER 13 // current year, or date of c++14 ratification 518253159Stheraven# endif 519253159Stheraven#endif // _LIBCPP_STD_VER 520253159Stheraven 521227825Stheraven#ifdef _LIBCPP_DEBUG2 522227825Stheraven# include <__debug> 523227825Stheraven#else 524227825Stheraven# define _LIBCPP_ASSERT(x, m) ((void)0) 525227825Stheraven#endif 526227825Stheraven 527227825Stheraven#endif // _LIBCPP_CONFIG 528