__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