1 // (C) Copyright Christopher Jefferson 2011.
2 // Use, modification and distribution are subject to the
3 // Boost Software License, Version 1.0. (See accompanying file
4 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 // See http://www.boost.org for most recent version.
9 // Might need more in here later.
11 #if !defined(_LIBCPP_VERSION)
13 # if !defined(_LIBCPP_VERSION)
14 # error "This is not libc++!"
18 #define BOOST_STDLIB "libc++ version " BOOST_STRINGIZE(_LIBCPP_VERSION)
20 #define BOOST_HAS_THREADS
22 #ifdef _LIBCPP_HAS_NO_VARIADICS
23 # define BOOST_NO_CXX11_HDR_TUPLE
26 // BOOST_NO_CXX11_ALLOCATOR should imply no support for the C++11
27 // allocator model. The C++11 allocator model requires a conforming
28 // std::allocator_traits which is only possible with C++11 template
29 // aliases since members rebind_alloc and rebind_traits require it.
30 #if defined(_LIBCPP_HAS_NO_TEMPLATE_ALIASES)
31 # define BOOST_NO_CXX11_ALLOCATOR
32 # define BOOST_NO_CXX11_POINTER_TRAITS
35 #if __cplusplus < 201103
37 // These two appear to be somewhat useable in C++03 mode, there may be others...
39 //# define BOOST_NO_CXX11_HDR_ARRAY
40 //# define BOOST_NO_CXX11_HDR_FORWARD_LIST
42 # define BOOST_NO_CXX11_HDR_CODECVT
43 # define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
44 # define BOOST_NO_CXX11_HDR_EXCEPTION
45 # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
46 # define BOOST_NO_CXX11_HDR_MUTEX
47 # define BOOST_NO_CXX11_HDR_RANDOM
48 # define BOOST_NO_CXX11_HDR_RATIO
49 # define BOOST_NO_CXX11_HDR_REGEX
50 # define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
51 # define BOOST_NO_CXX11_HDR_THREAD
52 # define BOOST_NO_CXX11_HDR_TUPLE
53 # define BOOST_NO_CXX11_HDR_TYPEINDEX
54 # define BOOST_NO_CXX11_HDR_UNORDERED_MAP
55 # define BOOST_NO_CXX11_HDR_UNORDERED_SET
56 # define BOOST_NO_CXX11_NUMERIC_LIMITS
57 # define BOOST_NO_CXX11_ALLOCATOR
58 # define BOOST_NO_CXX11_POINTER_TRAITS
59 # define BOOST_NO_CXX11_SMART_PTR
60 # define BOOST_NO_CXX11_HDR_FUNCTIONAL
61 # define BOOST_NO_CXX11_STD_ALIGN
62 # define BOOST_NO_CXX11_ADDRESSOF
63 # define BOOST_NO_CXX11_HDR_ATOMIC
64 # define BOOST_NO_CXX11_ATOMIC_SMART_PTR
65 # define BOOST_NO_CXX11_HDR_CHRONO
66 # define BOOST_NO_CXX11_HDR_TYPE_TRAITS
67 # define BOOST_NO_CXX11_HDR_FUTURE
68 #elif _LIBCPP_VERSION < 3700
70 // These appear to be unusable/incomplete so far:
72 # define BOOST_NO_CXX11_HDR_ATOMIC
73 # define BOOST_NO_CXX11_ATOMIC_SMART_PTR
74 # define BOOST_NO_CXX11_HDR_CHRONO
75 # define BOOST_NO_CXX11_HDR_TYPE_TRAITS
76 # define BOOST_NO_CXX11_HDR_FUTURE
80 #if _LIBCPP_VERSION < 3700
81 // libc++ uses a non-standard messages_base
82 #define BOOST_NO_STD_MESSAGES
86 #if (_LIBCPP_VERSION < 3700) || (__cplusplus <= 201402L)
87 # define BOOST_NO_CXX14_STD_EXCHANGE
91 #if (_LIBCPP_VERSION < 4000) || (__cplusplus <= 201402L)
92 # define BOOST_NO_CXX17_STD_APPLY
93 # define BOOST_NO_CXX17_HDR_OPTIONAL
94 # define BOOST_NO_CXX17_HDR_STRING_VIEW
95 # define BOOST_NO_CXX17_HDR_VARIANT
97 #if (_LIBCPP_VERSION > 4000) && (__cplusplus > 201402L) && !defined(_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR)
98 # define BOOST_NO_AUTO_PTR
100 #if (_LIBCPP_VERSION > 4000) && (__cplusplus > 201402L) && !defined(_LIBCPP_ENABLE_CXX17_REMOVED_RANDOM_SHUFFLE)
101 # define BOOST_NO_CXX98_RANDOM_SHUFFLE
103 #if (_LIBCPP_VERSION > 4000) && (__cplusplus > 201402L) && !defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS)
104 # define BOOST_NO_CXX98_BINDERS
107 #define BOOST_NO_CXX17_ITERATOR_TRAITS
108 #define BOOST_NO_CXX17_STD_INVOKE // Invoke support is incomplete (no invoke_result)
110 #if (_LIBCPP_VERSION <= 1101) && !defined(BOOST_NO_CXX11_THREAD_LOCAL)
111 // This is a bit of a sledgehammer, because really it's just libc++abi that has no
112 // support for thread_local, leading to linker errors such as
113 // "undefined reference to `__cxa_thread_atexit'". It is fixed in the
114 // most recent releases of libc++abi though...
115 # define BOOST_NO_CXX11_THREAD_LOCAL
118 #if defined(__linux__) && (_LIBCPP_VERSION < 6000) && !defined(BOOST_NO_CXX11_THREAD_LOCAL)
119 // After libc++-dev is installed on Trusty, clang++-libc++ almost works,
120 // except uses of `thread_local` fail with undefined reference to
121 // `__cxa_thread_atexit`.
123 // clang's libc++abi provides an implementation by deferring to the glibc
124 // implementation, which may or may not be available (it is not on Trusty).
125 // clang 4's libc++abi will provide an implementation if one is not in glibc
126 // though, so thread local support should work with clang 4 and above as long
127 // as libc++abi is linked in.
128 # define BOOST_NO_CXX11_THREAD_LOCAL
131 #if defined(__has_include)
132 #if !__has_include(<shared_mutex>)
133 # define BOOST_NO_CXX14_HDR_SHARED_MUTEX
134 #elif __cplusplus <= 201103
135 # define BOOST_NO_CXX14_HDR_SHARED_MUTEX
137 #elif __cplusplus < 201402
138 # define BOOST_NO_CXX14_HDR_SHARED_MUTEX
141 #if !defined(BOOST_NO_CXX14_HDR_SHARED_MUTEX) && (_LIBCPP_VERSION < 5000)
142 # define BOOST_NO_CXX14_HDR_SHARED_MUTEX