__config revision 249998
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 59227825Stheraven#ifdef _WIN32 60227825Stheraven# define _LIBCPP_LITTLE_ENDIAN 1 61227825Stheraven# define _LIBCPP_BIG_ENDIAN 0 62227825Stheraven// Compiler intrinsics (GCC or MSVC) 63241903Sdim# if (defined(_MSC_VER) && _MSC_VER >= 1400) \ 64241903Sdim || (defined(__GNUC__) && _GNUC_VER > 403) 65227825Stheraven# define _LIBCP_HAS_IS_BASE_OF 66227825Stheraven# endif 67227825Stheraven#endif // _WIN32 68227825Stheraven 69246487Stheraven#ifdef __linux__ 70246487Stheraven# if defined(__GNUC__) && _GNUC_VER >= 403 71246487Stheraven# define _LIBCP_HAS_IS_BASE_OF 72246487Stheraven# endif 73246487Stheraven#endif 74246487Stheraven 75232950Stheraven#ifdef __sun__ 76232950Stheraven# include <sys/isa_defs.h> 77232950Stheraven# ifdef _LITTLE_ENDIAN 78232950Stheraven# define _LIBCPP_LITTLE_ENDIAN 1 79232950Stheraven# define _LIBCPP_BIG_ENDIAN 0 80232950Stheraven# else 81232950Stheraven# define _LIBCPP_LITTLE_ENDIAN 0 82232950Stheraven# define _LIBCPP_BIG_ENDIAN 1 83232950Stheraven# endif 84232950Stheraven#endif // __sun__ 85232950Stheraven 86227825Stheraven#if !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN) 87227825Stheraven# include <endian.h> 88227825Stheraven# if __BYTE_ORDER == __LITTLE_ENDIAN 89227825Stheraven# define _LIBCPP_LITTLE_ENDIAN 1 90227825Stheraven# define _LIBCPP_BIG_ENDIAN 0 91227825Stheraven# elif __BYTE_ORDER == __BIG_ENDIAN 92227825Stheraven# define _LIBCPP_LITTLE_ENDIAN 0 93227825Stheraven# define _LIBCPP_BIG_ENDIAN 1 94227825Stheraven# else // __BYTE_ORDER == __BIG_ENDIAN 95227825Stheraven# error unable to determine endian 96227825Stheraven# endif 97227825Stheraven#endif // !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN) 98227825Stheraven 99249998Sdim#ifdef _WIN32 100227825Stheraven 101227825Stheraven// only really useful for a DLL 102227825Stheraven#ifdef _LIBCPP_DLL // this should be a compiler builtin define ideally... 103227825Stheraven# ifdef cxx_EXPORTS 104227825Stheraven# define _LIBCPP_HIDDEN 105249998Sdim# define _LIBCPP_FUNC_VIS __declspec(dllexport) 106249998Sdim# define _LIBCPP_TYPE_VIS __declspec(dllexport) 107227825Stheraven# else 108227825Stheraven# define _LIBCPP_HIDDEN 109249998Sdim# define _LIBCPP_FUNC_VIS __declspec(dllimport) 110249998Sdim# define _LIBCPP_TYPE_VIS __declspec(dllimport) 111227825Stheraven# endif 112227825Stheraven#else 113227825Stheraven# define _LIBCPP_HIDDEN 114249998Sdim# define _LIBCPP_FUNC_VIS 115249998Sdim# define _LIBCPP_TYPE_VIS 116227825Stheraven#endif 117227825Stheraven 118227825Stheraven#ifndef _LIBCPP_INLINE_VISIBILITY 119249998Sdim# ifdef _MSC_VER 120227825Stheraven# define _LIBCPP_INLINE_VISIBILITY __forceinline 121227825Stheraven# else // MinGW GCC and Clang 122227825Stheraven# define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__always_inline__)) 123227825Stheraven# endif 124227825Stheraven#endif 125227825Stheraven 126227825Stheraven#ifndef _LIBCPP_EXCEPTION_ABI 127249998Sdim#define _LIBCPP_EXCEPTION_ABI _LIBCPP_TYPE_VIS 128227825Stheraven#endif 129227825Stheraven 130227825Stheraven#ifndef _LIBCPP_ALWAYS_INLINE 131249998Sdim# ifdef _MSC_VER 132227825Stheraven# define _LIBCPP_ALWAYS_INLINE __forceinline 133227825Stheraven# endif 134227825Stheraven#endif 135227825Stheraven 136227825Stheraven#endif // _WIN32 137227825Stheraven 138227825Stheraven#ifndef _LIBCPP_HIDDEN 139227825Stheraven#define _LIBCPP_HIDDEN __attribute__ ((__visibility__("hidden"))) 140227825Stheraven#endif 141227825Stheraven 142249998Sdim#ifndef _LIBCPP_FUNC_VIS 143249998Sdim#define _LIBCPP_FUNC_VIS __attribute__ ((__visibility__("default"))) 144227825Stheraven#endif 145227825Stheraven 146249998Sdim#ifndef _LIBCPP_TYPE_VIS 147249998Sdim# if __has_attribute(type_visibility) 148249998Sdim# define _LIBCPP_TYPE_VIS __attribute__ ((__type_visibility__("default"))) 149249998Sdim# else 150249998Sdim# define _LIBCPP_TYPE_VIS __attribute__ ((__visibility__("default"))) 151249998Sdim# endif 152249998Sdim#endif 153249998Sdim 154227825Stheraven#ifndef _LIBCPP_INLINE_VISIBILITY 155227825Stheraven#define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__visibility__("hidden"), __always_inline__)) 156227825Stheraven#endif 157227825Stheraven 158227825Stheraven#ifndef _LIBCPP_EXCEPTION_ABI 159249998Sdim#define _LIBCPP_EXCEPTION_ABI _LIBCPP_TYPE_VIS 160227825Stheraven#endif 161227825Stheraven 162227825Stheraven#ifndef _LIBCPP_CANTTHROW 163227825Stheraven#define _LIBCPP_CANTTHROW __attribute__ ((__nothrow__)) 164227825Stheraven#endif 165227825Stheraven 166227825Stheraven#ifndef _LIBCPP_ALWAYS_INLINE 167227825Stheraven#define _LIBCPP_ALWAYS_INLINE __attribute__ ((__visibility__("hidden"), __always_inline__)) 168227825Stheraven#endif 169227825Stheraven 170227825Stheraven#if defined(__clang__) 171227825Stheraven 172227825Stheraven#if __has_feature(cxx_alignas) 173241903Sdim# define _ALIGNAS_TYPE(x) alignas(x) 174227825Stheraven# define _ALIGNAS(x) alignas(x) 175227825Stheraven#else 176241903Sdim# define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x)))) 177227825Stheraven# define _ALIGNAS(x) __attribute__((__aligned__(x))) 178227825Stheraven#endif 179227825Stheraven 180227825Stheraven#if !__has_feature(cxx_alias_templates) 181227825Stheraven#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 182227825Stheraven#endif 183227825Stheraven 184227825Stheraven#ifndef __GXX_EXPERIMENTAL_CXX0X__ 185227825Stheraven#ifdef __linux__ 186227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS 187227825Stheraven#else 188227825Stheraventypedef __char16_t char16_t; 189227825Stheraventypedef __char32_t char32_t; 190227825Stheraven#endif 191227825Stheraven#endif 192227825Stheraven 193227825Stheraven#if !(__has_feature(cxx_exceptions)) 194227825Stheraven#define _LIBCPP_NO_EXCEPTIONS 195227825Stheraven#endif 196227825Stheraven 197227825Stheraven#if !(__has_feature(cxx_rtti)) 198227825Stheraven#define _LIBCPP_NO_RTTI 199227825Stheraven#endif 200227825Stheraven 201232950Stheraven#if !(__has_feature(cxx_strong_enums)) 202232950Stheraven#define _LIBCPP_HAS_NO_STRONG_ENUMS 203232950Stheraven#endif 204232950Stheraven 205227825Stheraven#if !(__has_feature(cxx_decltype)) 206227825Stheraven#define _LIBCPP_HAS_NO_DECLTYPE 207227825Stheraven#endif 208227825Stheraven 209227825Stheraven#if __has_feature(cxx_attributes) 210241903Sdim# define _LIBCPP_NORETURN [[noreturn]] 211227825Stheraven#else 212241903Sdim# define _LIBCPP_NORETURN __attribute__ ((noreturn)) 213227825Stheraven#endif 214227825Stheraven 215227825Stheraven#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 216227825Stheraven 217227825Stheraven#if !(__has_feature(cxx_deleted_functions)) 218227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 219227825Stheraven#endif // !(__has_feature(cxx_deleted_functions)) 220227825Stheraven 221227825Stheraven#if !(__has_feature(cxx_lambdas)) 222227825Stheraven#define _LIBCPP_HAS_NO_LAMBDAS 223227825Stheraven#endif 224227825Stheraven 225227825Stheraven#if !(__has_feature(cxx_nullptr)) 226227825Stheraven#define _LIBCPP_HAS_NO_NULLPTR 227227825Stheraven#endif 228227825Stheraven 229227825Stheraven#if !(__has_feature(cxx_rvalue_references)) 230227825Stheraven#define _LIBCPP_HAS_NO_RVALUE_REFERENCES 231227825Stheraven#endif 232227825Stheraven 233227825Stheraven#if !(__has_feature(cxx_static_assert)) 234227825Stheraven#define _LIBCPP_HAS_NO_STATIC_ASSERT 235227825Stheraven#endif 236227825Stheraven 237227825Stheraven#if !(__has_feature(cxx_auto_type)) 238227825Stheraven#define _LIBCPP_HAS_NO_AUTO_TYPE 239227825Stheraven#endif 240227825Stheraven 241227825Stheraven#if !(__has_feature(cxx_access_control_sfinae)) || !__has_feature(cxx_trailing_return) 242227825Stheraven#define _LIBCPP_HAS_NO_ADVANCED_SFINAE 243227825Stheraven#endif 244227825Stheraven 245227825Stheraven#if !(__has_feature(cxx_variadic_templates)) 246227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS 247227825Stheraven#endif 248227825Stheraven 249227825Stheraven#if !(__has_feature(cxx_trailing_return)) 250227825Stheraven#define _LIBCPP_HAS_NO_TRAILING_RETURN 251227825Stheraven#endif 252227825Stheraven 253227825Stheraven#if !(__has_feature(cxx_generalized_initializers)) 254227825Stheraven#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 255227825Stheraven#endif 256227825Stheraven 257227825Stheraven#if __has_feature(is_base_of) 258227825Stheraven# define _LIBCP_HAS_IS_BASE_OF 259227825Stheraven#endif 260227825Stheraven 261227825Stheraven// Objective-C++ features (opt-in) 262227825Stheraven#if __has_feature(objc_arc) 263227825Stheraven#define _LIBCPP_HAS_OBJC_ARC 264227825Stheraven#endif 265227825Stheraven 266227825Stheraven#if __has_feature(objc_arc_weak) 267227825Stheraven#define _LIBCPP_HAS_OBJC_ARC_WEAK 268232950Stheraven#define _LIBCPP_HAS_NO_STRONG_ENUMS 269227825Stheraven#endif 270227825Stheraven 271227825Stheraven#if !(__has_feature(cxx_constexpr)) 272227825Stheraven#define _LIBCPP_HAS_NO_CONSTEXPR 273227825Stheraven#endif 274227825Stheraven 275249998Sdim#if defined(__FreeBSD__) && (__ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L) 276232972Stheraven#define _LIBCPP_HAS_QUICK_EXIT 277241903Sdim#define _LIBCPP_HAS_C11_FEATURES 278232972Stheraven#endif 279232972Stheraven 280227825Stheraven#if (__has_feature(cxx_noexcept)) 281227825Stheraven# define _NOEXCEPT noexcept 282227825Stheraven# define _NOEXCEPT_(x) noexcept(x) 283227825Stheraven#else 284227825Stheraven# define _NOEXCEPT throw() 285227825Stheraven# define _NOEXCEPT_(x) 286227825Stheraven#endif 287227825Stheraven 288227825Stheraven#if __has_feature(underlying_type) 289227825Stheraven# define _LIBCXX_UNDERLYING_TYPE(T) __underlying_type(T) 290227825Stheraven#endif 291227825Stheraven 292227825Stheraven// Inline namespaces are available in Clang regardless of C++ dialect. 293227825Stheraven#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE { 294227825Stheraven#define _LIBCPP_END_NAMESPACE_STD } } 295227825Stheraven#define _VSTD std::_LIBCPP_NAMESPACE 296227825Stheraven 297227825Stheravennamespace std { 298227825Stheraven inline namespace _LIBCPP_NAMESPACE { 299227825Stheraven } 300227825Stheraven} 301227825Stheraven 302227825Stheraven#elif defined(__GNUC__) 303227825Stheraven 304227825Stheraven#define _ALIGNAS(x) __attribute__((__aligned__(x))) 305241903Sdim#define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x)))) 306227825Stheraven 307241903Sdim#define _LIBCPP_NORETURN __attribute__((noreturn)) 308227825Stheraven 309227825Stheraven#if !__EXCEPTIONS 310227825Stheraven#define _LIBCPP_NO_EXCEPTIONS 311227825Stheraven#endif 312227825Stheraven 313227825Stheraven#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 314227825Stheraven#define _LIBCPP_HAS_NO_CONSTEXPR 315227825Stheraven 316227825Stheraven#define _NOEXCEPT throw() 317227825Stheraven#define _NOEXCEPT_(x) 318227825Stheraven 319227825Stheraven#ifndef __GXX_EXPERIMENTAL_CXX0X__ 320227825Stheraven 321227825Stheraven#define _LIBCPP_HAS_NO_ADVANCED_SFINAE 322227825Stheraven#define _LIBCPP_HAS_NO_DECLTYPE 323227825Stheraven#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 324227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 325227825Stheraven#define _LIBCPP_HAS_NO_NULLPTR 326227825Stheraven#define _LIBCPP_HAS_NO_STATIC_ASSERT 327227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS 328227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS 329227825Stheraven#define _LIBCPP_HAS_NO_RVALUE_REFERENCES 330227825Stheraven#define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS 331227825Stheraven 332227825Stheraven#else // __GXX_EXPERIMENTAL_CXX0X__ 333227825Stheraven 334227825Stheraven#define _LIBCPP_HAS_NO_TRAILING_RETURN 335227825Stheraven#define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS 336227825Stheraven 337241903Sdim#if _GNUC_VER < 403 338227825Stheraven#define _LIBCPP_HAS_NO_RVALUE_REFERENCES 339227825Stheraven#endif 340227825Stheraven 341241903Sdim#if _GNUC_VER < 403 342227825Stheraven#define _LIBCPP_HAS_NO_STATIC_ASSERT 343227825Stheraven#endif 344227825Stheraven 345241903Sdim#if _GNUC_VER < 404 346227825Stheraven#define _LIBCPP_HAS_NO_ADVANCED_SFINAE 347227825Stheraven#define _LIBCPP_HAS_NO_DECLTYPE 348227825Stheraven#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS 349227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 350227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS 351227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS 352227825Stheraven#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 353241903Sdim#endif // _GNUC_VER < 404 354227825Stheraven 355241903Sdim#if _GNUC_VER < 406 356227825Stheraven#define _LIBCPP_HAS_NO_NULLPTR 357227825Stheraven#endif 358227825Stheraven 359227825Stheraven#endif // __GXX_EXPERIMENTAL_CXX0X__ 360227825Stheraven 361227825Stheraven#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { namespace _LIBCPP_NAMESPACE { 362227825Stheraven#define _LIBCPP_END_NAMESPACE_STD } } 363227825Stheraven#define _VSTD std::_LIBCPP_NAMESPACE 364227825Stheraven 365227825Stheravennamespace std { 366227825Stheravennamespace _LIBCPP_NAMESPACE { 367227825Stheraven} 368227825Stheravenusing namespace _LIBCPP_NAMESPACE __attribute__((__strong__)); 369227825Stheraven} 370227825Stheraven 371227825Stheraven#elif defined(_MSC_VER) 372227825Stheraven 373227825Stheraven#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES 374227825Stheraven#define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER 375227825Stheraven#define _LIBCPP_HAS_NO_CONSTEXPR 376227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS 377227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS 378227825Stheraven#define __alignof__ __alignof 379241903Sdim#define _LIBCPP_NORETURN __declspec(noreturn) 380227825Stheraven#define _ALIGNAS(x) __declspec(align(x)) 381227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS 382227825Stheraven 383227825Stheraven#define _NOEXCEPT throw() 384227825Stheraven#define _NOEXCEPT_(x) 385227825Stheraven 386227825Stheraven#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { 387227825Stheraven#define _LIBCPP_END_NAMESPACE_STD } 388227825Stheraven#define _VSTD std 389227825Stheraven 390227825Stheravennamespace std { 391227825Stheraven} 392227825Stheraven 393227825Stheraven#endif // __clang__ || __GNUC___ || _MSC_VER 394227825Stheraven 395227825Stheraven#ifdef _LIBCPP_HAS_NO_UNICODE_CHARS 396227825Stheraventypedef unsigned short char16_t; 397227825Stheraventypedef unsigned int char32_t; 398227825Stheraven#endif // _LIBCPP_HAS_NO_UNICODE_CHARS 399227825Stheraven 400227825Stheraven#ifdef _LIBCPP_HAS_NO_STATIC_ASSERT 401227825Stheraven 402227825Stheraventemplate <bool> struct __static_assert_test; 403227825Stheraventemplate <> struct __static_assert_test<true> {}; 404227825Stheraventemplate <unsigned> struct __static_assert_check {}; 405227825Stheraven#define static_assert(__b, __m) \ 406227825Stheraven typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \ 407227825Stheraven _LIBCPP_CONCAT(__t, __LINE__) 408227825Stheraven 409227825Stheraven#endif // _LIBCPP_HAS_NO_STATIC_ASSERT 410227825Stheraven 411227825Stheraven#ifdef _LIBCPP_HAS_NO_DECLTYPE 412227825Stheraven#define decltype(x) __typeof__(x) 413227825Stheraven#endif 414227825Stheraven 415227825Stheraven#ifdef _LIBCPP_HAS_NO_CONSTEXPR 416234976Stheraven#define _LIBCPP_CONSTEXPR 417234976Stheraven#else 418234976Stheraven#define _LIBCPP_CONSTEXPR constexpr 419227825Stheraven#endif 420227825Stheraven 421241903Sdim#ifdef __GNUC__ 422241903Sdim#define _NOALIAS __attribute__((malloc)) 423241903Sdim#else 424241903Sdim#define _NOALIAS 425241903Sdim#endif 426241903Sdim 427227825Stheraven#ifndef __has_feature 428227825Stheraven#define __has_feature(__x) 0 429227825Stheraven#endif 430227825Stheraven 431232950Stheraven#if __has_feature(cxx_explicit_conversions) 432232950Stheraven# define _LIBCPP_EXPLICIT explicit 433232950Stheraven#else 434232950Stheraven# define _LIBCPP_EXPLICIT 435232950Stheraven#endif 436232950Stheraven 437232950Stheraven#ifdef _LIBCPP_HAS_NO_STRONG_ENUMS 438249998Sdim#define _LIBCPP_DECLARE_STRONG_ENUM(x) struct _LIBCPP_TYPE_VIS x { enum __lx 439232950Stheraven#define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) \ 440242945Stheraven __lx __v_; \ 441242945Stheraven _LIBCPP_ALWAYS_INLINE x(__lx __v) : __v_(__v) {} \ 442242945Stheraven _LIBCPP_ALWAYS_INLINE explicit x(int __v) : __v_(static_cast<__lx>(__v)) {} \ 443232950Stheraven _LIBCPP_ALWAYS_INLINE operator int() const {return __v_;} \ 444232950Stheraven }; 445232950Stheraven#else // _LIBCPP_HAS_NO_STRONG_ENUMS 446249998Sdim#define _LIBCPP_DECLARE_STRONG_ENUM(x) enum class _LIBCPP_TYPE_VIS x 447232950Stheraven#define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) 448232950Stheraven#endif // _LIBCPP_HAS_NO_STRONG_ENUMS 449232950Stheraven 450242945Stheraven#ifndef _LIBCPP_EXTERN_TEMPLATE 451242945Stheraven#define _LIBCPP_EXTERN_TEMPLATE(...) extern template __VA_ARGS__; 452242945Stheraven#endif 453242945Stheraven 454249998Sdim#if defined(__APPLE__) || defined(__FreeBSD__) || defined(_WIN32) || defined(__sun__) 455227825Stheraven#define _LIBCPP_LOCALE__L_EXTENSIONS 1 456227825Stheraven#endif 457249998Sdim#ifdef __FreeBSD__ 458227825Stheraven#define _DECLARE_C99_LDBL_MATH 1 459227825Stheraven#endif 460227825Stheraven 461249998Sdim#if defined(__APPLE__) || defined(__FreeBSD__) 462227825Stheraven#define _LIBCPP_HAS_DEFAULTRUNELOCALE 463227825Stheraven#endif 464227825Stheraven 465249998Sdim#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__sun__) 466227825Stheraven#define _LIBCPP_WCTYPE_IS_MASK 467227825Stheraven#endif 468227825Stheraven 469227825Stheraven#ifdef _LIBCPP_DEBUG2 470227825Stheraven# if _LIBCPP_DEBUG2 == 0 471227825Stheraven# define _LIBCPP_DEBUG_LEVEL 1 472227825Stheraven# elif _LIBCPP_DEBUG2 == 1 473227825Stheraven# define _LIBCPP_DEBUG_LEVEL 2 474227825Stheraven# else 475227825Stheraven# error Supported values for _LIBCPP_DEBUG2 are 0 and 1 476227825Stheraven# endif 477227825Stheraven#endif 478227825Stheraven 479227825Stheraven#ifdef _LIBCPP_DEBUG2 480227825Stheraven# include <__debug> 481227825Stheraven#else 482227825Stheraven# define _LIBCPP_ASSERT(x, m) ((void)0) 483227825Stheraven#endif 484227825Stheraven 485227825Stheraven#endif // _LIBCPP_CONFIG 486