__config revision 243572
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
14227825Stheraven#if !_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
69232950Stheraven#ifdef __sun__
70232950Stheraven# include <sys/isa_defs.h>
71232950Stheraven# ifdef _LITTLE_ENDIAN
72232950Stheraven#   define _LIBCPP_LITTLE_ENDIAN 1
73232950Stheraven#   define _LIBCPP_BIG_ENDIAN    0
74232950Stheraven# else
75232950Stheraven#   define _LIBCPP_LITTLE_ENDIAN 0
76232950Stheraven#   define _LIBCPP_BIG_ENDIAN    1
77232950Stheraven# endif
78232950Stheraven#endif // __sun__
79232950Stheraven
80227825Stheraven#if !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN)
81227825Stheraven# include <endian.h>
82227825Stheraven# if __BYTE_ORDER == __LITTLE_ENDIAN
83227825Stheraven#  define _LIBCPP_LITTLE_ENDIAN 1
84227825Stheraven#  define _LIBCPP_BIG_ENDIAN    0
85227825Stheraven# elif __BYTE_ORDER == __BIG_ENDIAN
86227825Stheraven#  define _LIBCPP_LITTLE_ENDIAN 0
87227825Stheraven#  define _LIBCPP_BIG_ENDIAN    1
88227825Stheraven# else  // __BYTE_ORDER == __BIG_ENDIAN
89227825Stheraven#  error unable to determine endian
90227825Stheraven# endif
91227825Stheraven#endif  // !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN)
92227825Stheraven
93227825Stheraven#if _WIN32
94227825Stheraven
95227825Stheraven// only really useful for a DLL
96227825Stheraven#ifdef _LIBCPP_DLL // this should be a compiler builtin define ideally...
97227825Stheraven# ifdef cxx_EXPORTS
98227825Stheraven#  define _LIBCPP_HIDDEN
99227825Stheraven#  define _LIBCPP_VISIBLE __declspec(dllexport)
100227825Stheraven# else
101227825Stheraven#  define _LIBCPP_HIDDEN
102227825Stheraven#  define _LIBCPP_VISIBLE __declspec(dllimport)
103227825Stheraven# endif
104227825Stheraven#else
105227825Stheraven# define _LIBCPP_HIDDEN
106227825Stheraven# define _LIBCPP_VISIBLE
107227825Stheraven#endif
108227825Stheraven
109227825Stheraven#ifndef _LIBCPP_INLINE_VISIBILITY
110227825Stheraven# if _MSC_VER
111227825Stheraven#  define _LIBCPP_INLINE_VISIBILITY __forceinline
112227825Stheraven# else // MinGW GCC and Clang
113227825Stheraven#  define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__always_inline__))
114227825Stheraven# endif
115227825Stheraven#endif
116227825Stheraven
117227825Stheraven#ifndef _LIBCPP_EXCEPTION_ABI
118227825Stheraven#define _LIBCPP_EXCEPTION_ABI _LIBCPP_VISIBLE
119227825Stheraven#endif
120227825Stheraven
121227825Stheraven#ifndef _LIBCPP_ALWAYS_INLINE
122227825Stheraven# if _MSC_VER
123227825Stheraven#  define _LIBCPP_ALWAYS_INLINE __forceinline
124227825Stheraven# endif
125227825Stheraven#endif
126227825Stheraven
127227825Stheraven#endif // _WIN32
128227825Stheraven
129227825Stheraven#ifndef _LIBCPP_HIDDEN
130227825Stheraven#define _LIBCPP_HIDDEN __attribute__ ((__visibility__("hidden")))
131227825Stheraven#endif
132227825Stheraven
133227825Stheraven#ifndef _LIBCPP_VISIBLE
134227825Stheraven#define _LIBCPP_VISIBLE __attribute__ ((__visibility__("default")))
135227825Stheraven#endif
136227825Stheraven
137227825Stheraven#ifndef _LIBCPP_INLINE_VISIBILITY
138227825Stheraven#define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__visibility__("hidden"), __always_inline__))
139227825Stheraven#endif
140227825Stheraven
141227825Stheraven#ifndef _LIBCPP_EXCEPTION_ABI
142227825Stheraven#define _LIBCPP_EXCEPTION_ABI __attribute__ ((__visibility__("default")))
143227825Stheraven#endif
144227825Stheraven
145227825Stheraven#ifndef _LIBCPP_CANTTHROW
146227825Stheraven#define _LIBCPP_CANTTHROW __attribute__ ((__nothrow__))
147227825Stheraven#endif
148227825Stheraven
149227825Stheraven#ifndef _LIBCPP_ALWAYS_INLINE
150227825Stheraven#define _LIBCPP_ALWAYS_INLINE  __attribute__ ((__visibility__("hidden"), __always_inline__))
151227825Stheraven#endif
152227825Stheraven
153227825Stheraven#if defined(__clang__)
154227825Stheraven
155227825Stheraven#if __has_feature(cxx_alignas)
156241903Sdim#  define _ALIGNAS_TYPE(x) alignas(x)
157227825Stheraven#  define _ALIGNAS(x) alignas(x)
158227825Stheraven#else
159241903Sdim#  define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x))))
160227825Stheraven#  define _ALIGNAS(x) __attribute__((__aligned__(x)))
161227825Stheraven#endif
162227825Stheraven
163227825Stheraven#if !__has_feature(cxx_alias_templates)
164227825Stheraven#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES
165227825Stheraven#endif
166227825Stheraven
167227825Stheraven#ifndef __GXX_EXPERIMENTAL_CXX0X__
168227825Stheraven#ifdef __linux__
169227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS
170227825Stheraven#else
171227825Stheraventypedef __char16_t char16_t;
172227825Stheraventypedef __char32_t char32_t;
173227825Stheraven#endif
174227825Stheraven#endif
175227825Stheraven
176227825Stheraven#if !(__has_feature(cxx_exceptions))
177227825Stheraven#define _LIBCPP_NO_EXCEPTIONS
178227825Stheraven#endif
179227825Stheraven
180227825Stheraven#if !(__has_feature(cxx_rtti))
181227825Stheraven#define _LIBCPP_NO_RTTI
182227825Stheraven#endif
183227825Stheraven
184232950Stheraven#if !(__has_feature(cxx_strong_enums))
185232950Stheraven#define _LIBCPP_HAS_NO_STRONG_ENUMS
186232950Stheraven#endif
187232950Stheraven
188227825Stheraven#if !(__has_feature(cxx_decltype))
189227825Stheraven#define _LIBCPP_HAS_NO_DECLTYPE
190227825Stheraven#endif
191227825Stheraven
192227825Stheraven#if __has_feature(cxx_attributes)
193241903Sdim#  define _LIBCPP_NORETURN [[noreturn]]
194227825Stheraven#else
195241903Sdim#  define _LIBCPP_NORETURN __attribute__ ((noreturn))
196227825Stheraven#endif
197227825Stheraven
198227825Stheraven#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
199227825Stheraven
200227825Stheraven#if !(__has_feature(cxx_deleted_functions))
201227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
202227825Stheraven#endif  // !(__has_feature(cxx_deleted_functions))
203227825Stheraven
204227825Stheraven#if !(__has_feature(cxx_lambdas))
205227825Stheraven#define _LIBCPP_HAS_NO_LAMBDAS
206227825Stheraven#endif
207227825Stheraven
208227825Stheraven#if !(__has_feature(cxx_nullptr))
209227825Stheraven#define _LIBCPP_HAS_NO_NULLPTR
210227825Stheraven#endif
211227825Stheraven
212227825Stheraven#if !(__has_feature(cxx_rvalue_references))
213227825Stheraven#define _LIBCPP_HAS_NO_RVALUE_REFERENCES
214227825Stheraven#endif
215227825Stheraven
216227825Stheraven#if !(__has_feature(cxx_static_assert))
217227825Stheraven#define _LIBCPP_HAS_NO_STATIC_ASSERT
218227825Stheraven#endif
219227825Stheraven
220227825Stheraven#if !(__has_feature(cxx_auto_type))
221227825Stheraven#define _LIBCPP_HAS_NO_AUTO_TYPE
222227825Stheraven#endif
223227825Stheraven
224227825Stheraven#if !(__has_feature(cxx_access_control_sfinae)) || !__has_feature(cxx_trailing_return)
225227825Stheraven#define _LIBCPP_HAS_NO_ADVANCED_SFINAE
226227825Stheraven#endif
227227825Stheraven
228227825Stheraven#if !(__has_feature(cxx_variadic_templates))
229227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS
230227825Stheraven#endif
231227825Stheraven
232227825Stheraven#if !(__has_feature(cxx_trailing_return))
233227825Stheraven#define _LIBCPP_HAS_NO_TRAILING_RETURN
234227825Stheraven#endif
235227825Stheraven
236227825Stheraven#if !(__has_feature(cxx_generalized_initializers))
237227825Stheraven#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
238227825Stheraven#endif
239227825Stheraven
240227825Stheraven#if __has_feature(is_base_of)
241227825Stheraven#  define _LIBCP_HAS_IS_BASE_OF
242227825Stheraven#endif
243227825Stheraven
244227825Stheraven// Objective-C++ features (opt-in)
245227825Stheraven#if __has_feature(objc_arc)
246227825Stheraven#define _LIBCPP_HAS_OBJC_ARC
247227825Stheraven#endif
248227825Stheraven
249227825Stheraven#if __has_feature(objc_arc_weak)
250227825Stheraven#define _LIBCPP_HAS_OBJC_ARC_WEAK
251232950Stheraven#define _LIBCPP_HAS_NO_STRONG_ENUMS
252227825Stheraven#endif
253227825Stheraven
254227825Stheraven#if !(__has_feature(cxx_constexpr))
255227825Stheraven#define _LIBCPP_HAS_NO_CONSTEXPR
256227825Stheraven#endif
257227825Stheraven
258241903Sdim#if __FreeBSD__ && (__ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L)
259232972Stheraven#define _LIBCPP_HAS_QUICK_EXIT
260241903Sdim#define _LIBCPP_HAS_C11_FEATURES
261232972Stheraven#endif
262232972Stheraven
263227825Stheraven#if (__has_feature(cxx_noexcept))
264227825Stheraven#  define _NOEXCEPT noexcept
265227825Stheraven#  define _NOEXCEPT_(x) noexcept(x)
266227825Stheraven#else
267227825Stheraven#  define _NOEXCEPT throw()
268227825Stheraven#  define _NOEXCEPT_(x)
269227825Stheraven#endif
270227825Stheraven
271227825Stheraven#if __has_feature(underlying_type)
272227825Stheraven#  define _LIBCXX_UNDERLYING_TYPE(T) __underlying_type(T)
273227825Stheraven#endif
274227825Stheraven
275227825Stheraven// Inline namespaces are available in Clang regardless of C++ dialect.
276227825Stheraven#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE {
277227825Stheraven#define _LIBCPP_END_NAMESPACE_STD  } }
278227825Stheraven#define _VSTD std::_LIBCPP_NAMESPACE
279227825Stheraven
280227825Stheravennamespace std {
281227825Stheraven  inline namespace _LIBCPP_NAMESPACE {
282227825Stheraven  }
283227825Stheraven}
284227825Stheraven
285227825Stheraven#elif defined(__GNUC__)
286227825Stheraven
287227825Stheraven#define _ALIGNAS(x) __attribute__((__aligned__(x)))
288241903Sdim#define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x))))
289227825Stheraven
290241903Sdim#define _LIBCPP_NORETURN __attribute__((noreturn))
291227825Stheraven
292227825Stheraven#if !__EXCEPTIONS
293227825Stheraven#define _LIBCPP_NO_EXCEPTIONS
294227825Stheraven#endif
295227825Stheraven
296227825Stheraven#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES
297227825Stheraven#define _LIBCPP_HAS_NO_CONSTEXPR
298227825Stheraven
299227825Stheraven#define _NOEXCEPT throw()
300227825Stheraven#define _NOEXCEPT_(x)
301227825Stheraven
302227825Stheraven#ifndef __GXX_EXPERIMENTAL_CXX0X__
303227825Stheraven
304227825Stheraven#define _LIBCPP_HAS_NO_ADVANCED_SFINAE
305227825Stheraven#define _LIBCPP_HAS_NO_DECLTYPE
306227825Stheraven#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
307227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
308227825Stheraven#define _LIBCPP_HAS_NO_NULLPTR
309227825Stheraven#define _LIBCPP_HAS_NO_STATIC_ASSERT
310227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS
311227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS
312227825Stheraven#define _LIBCPP_HAS_NO_RVALUE_REFERENCES
313227825Stheraven#define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS
314227825Stheraven
315227825Stheraven#else  // __GXX_EXPERIMENTAL_CXX0X__
316227825Stheraven
317227825Stheraven#define _LIBCPP_HAS_NO_TRAILING_RETURN
318227825Stheraven#define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS
319227825Stheraven
320241903Sdim#if _GNUC_VER < 403
321227825Stheraven#define _LIBCPP_HAS_NO_RVALUE_REFERENCES
322227825Stheraven#endif
323227825Stheraven
324241903Sdim#if _GNUC_VER < 403
325227825Stheraven#define _LIBCPP_HAS_NO_STATIC_ASSERT
326227825Stheraven#endif
327227825Stheraven
328241903Sdim#if _GNUC_VER < 404
329227825Stheraven#define _LIBCPP_HAS_NO_ADVANCED_SFINAE
330227825Stheraven#define _LIBCPP_HAS_NO_DECLTYPE
331227825Stheraven#define _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
332227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
333227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS
334227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS
335227825Stheraven#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
336241903Sdim#endif  // _GNUC_VER < 404
337227825Stheraven
338241903Sdim#if _GNUC_VER < 406
339227825Stheraven#define _LIBCPP_HAS_NO_NULLPTR
340227825Stheraven#endif
341227825Stheraven
342227825Stheraven#endif  // __GXX_EXPERIMENTAL_CXX0X__
343227825Stheraven
344227825Stheraven#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std { namespace _LIBCPP_NAMESPACE {
345227825Stheraven#define _LIBCPP_END_NAMESPACE_STD  } }
346227825Stheraven#define _VSTD std::_LIBCPP_NAMESPACE
347227825Stheraven
348227825Stheravennamespace std {
349227825Stheravennamespace _LIBCPP_NAMESPACE {
350227825Stheraven}
351227825Stheravenusing namespace _LIBCPP_NAMESPACE __attribute__((__strong__));
352227825Stheraven}
353227825Stheraven
354227825Stheraven#elif defined(_MSC_VER)
355227825Stheraven
356227825Stheraven#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES
357227825Stheraven#define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
358227825Stheraven#define _LIBCPP_HAS_NO_CONSTEXPR
359227825Stheraven#define _LIBCPP_HAS_NO_UNICODE_CHARS
360227825Stheraven#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
361227825Stheraven#define __alignof__ __alignof
362241903Sdim#define _LIBCPP_NORETURN __declspec(noreturn)
363227825Stheraven#define _ALIGNAS(x) __declspec(align(x))
364227825Stheraven#define _LIBCPP_HAS_NO_VARIADICS
365227825Stheraven
366227825Stheraven#define _NOEXCEPT throw()
367227825Stheraven#define _NOEXCEPT_(x)
368227825Stheraven
369227825Stheraven#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {
370227825Stheraven#define _LIBCPP_END_NAMESPACE_STD  }
371227825Stheraven#define _VSTD std
372227825Stheraven
373227825Stheravennamespace std {
374227825Stheraven}
375227825Stheraven
376227825Stheraven#endif // __clang__ || __GNUC___ || _MSC_VER
377227825Stheraven
378227825Stheraven#ifdef _LIBCPP_HAS_NO_UNICODE_CHARS
379227825Stheraventypedef unsigned short char16_t;
380227825Stheraventypedef unsigned int   char32_t;
381227825Stheraven#endif  // _LIBCPP_HAS_NO_UNICODE_CHARS
382227825Stheraven
383227825Stheraven#ifdef _LIBCPP_HAS_NO_STATIC_ASSERT
384227825Stheraven
385227825Stheraventemplate <bool> struct __static_assert_test;
386227825Stheraventemplate <> struct __static_assert_test<true> {};
387227825Stheraventemplate <unsigned> struct __static_assert_check {};
388227825Stheraven#define static_assert(__b, __m) \
389227825Stheraven    typedef __static_assert_check<sizeof(__static_assert_test<(__b)>)> \
390227825Stheraven    _LIBCPP_CONCAT(__t, __LINE__)
391227825Stheraven
392227825Stheraven#endif  // _LIBCPP_HAS_NO_STATIC_ASSERT
393227825Stheraven
394227825Stheraven#ifdef _LIBCPP_HAS_NO_DECLTYPE
395227825Stheraven#define decltype(x) __typeof__(x)
396227825Stheraven#endif
397227825Stheraven
398227825Stheraven#ifdef _LIBCPP_HAS_NO_CONSTEXPR
399234976Stheraven#define _LIBCPP_CONSTEXPR
400234976Stheraven#else
401234976Stheraven#define _LIBCPP_CONSTEXPR constexpr
402227825Stheraven#endif
403227825Stheraven
404241903Sdim#ifdef __GNUC__
405241903Sdim#define _NOALIAS __attribute__((malloc))
406241903Sdim#else
407241903Sdim#define _NOALIAS
408241903Sdim#endif
409241903Sdim
410227825Stheraven#ifndef __has_feature
411227825Stheraven#define __has_feature(__x) 0
412227825Stheraven#endif
413227825Stheraven
414232950Stheraven#if __has_feature(cxx_explicit_conversions)
415232950Stheraven#   define _LIBCPP_EXPLICIT explicit
416232950Stheraven#else
417232950Stheraven#   define _LIBCPP_EXPLICIT
418232950Stheraven#endif
419232950Stheraven
420232950Stheraven#ifdef _LIBCPP_HAS_NO_STRONG_ENUMS
421242945Stheraven#define _LIBCPP_DECLARE_STRONG_ENUM(x) struct _LIBCPP_VISIBLE x { enum __lx
422232950Stheraven#define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) \
423242945Stheraven    __lx __v_; \
424242945Stheraven    _LIBCPP_ALWAYS_INLINE x(__lx __v) : __v_(__v) {} \
425242945Stheraven    _LIBCPP_ALWAYS_INLINE explicit x(int __v) : __v_(static_cast<__lx>(__v)) {} \
426232950Stheraven    _LIBCPP_ALWAYS_INLINE operator int() const {return __v_;} \
427232950Stheraven    };
428232950Stheraven#else  // _LIBCPP_HAS_NO_STRONG_ENUMS
429232950Stheraven#define _LIBCPP_DECLARE_STRONG_ENUM(x) enum class _LIBCPP_VISIBLE x
430232950Stheraven#define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x)
431232950Stheraven#endif  // _LIBCPP_HAS_NO_STRONG_ENUMS
432232950Stheraven
433242945Stheraven#ifndef _LIBCPP_EXTERN_TEMPLATE
434242945Stheraven#define _LIBCPP_EXTERN_TEMPLATE(...) extern template __VA_ARGS__;
435242945Stheraven#endif
436242945Stheraven
437232950Stheraven#if __APPLE__ || __FreeBSD__ || _WIN32 || __sun__
438227825Stheraven#define _LIBCPP_LOCALE__L_EXTENSIONS 1
439227825Stheraven#endif
440227825Stheraven#if __FreeBSD__
441227825Stheraven#define _DECLARE_C99_LDBL_MATH 1
442227825Stheraven#endif
443227825Stheraven
444227825Stheraven#if __APPLE__ || __FreeBSD__
445227825Stheraven#define _LIBCPP_HAS_DEFAULTRUNELOCALE
446227825Stheraven#endif
447227825Stheraven
448232950Stheraven#if __APPLE__ || __FreeBSD__ || __sun__
449227825Stheraven#define _LIBCPP_WCTYPE_IS_MASK
450227825Stheraven#endif
451227825Stheraven
452227825Stheraven#ifdef _LIBCPP_DEBUG2
453227825Stheraven#   if _LIBCPP_DEBUG2 == 0
454227825Stheraven#       define _LIBCPP_DEBUG_LEVEL 1
455227825Stheraven#   elif _LIBCPP_DEBUG2 == 1
456227825Stheraven#       define _LIBCPP_DEBUG_LEVEL 2
457227825Stheraven#   else
458227825Stheraven#       error Supported values for _LIBCPP_DEBUG2 are 0 and 1
459227825Stheraven#   endif
460227825Stheraven#endif
461227825Stheraven
462227825Stheraven#ifdef _LIBCPP_DEBUG2
463227825Stheraven#   include <__debug>
464227825Stheraven#else
465227825Stheraven#   define _LIBCPP_ASSERT(x, m) ((void)0)
466227825Stheraven#endif
467227825Stheraven
468227825Stheraven#endif  // _LIBCPP_CONFIG
469