]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
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) | |
5 | ||
6 | // See http://www.boost.org for most recent version. | |
7 | ||
8 | // config for libc++ | |
9 | // Might need more in here later. | |
10 | ||
11 | #if !defined(_LIBCPP_VERSION) | |
12 | # include <ciso646> | |
13 | # if !defined(_LIBCPP_VERSION) | |
14 | # error "This is not libc++!" | |
15 | # endif | |
16 | #endif | |
17 | ||
18 | #define BOOST_STDLIB "libc++ version " BOOST_STRINGIZE(_LIBCPP_VERSION) | |
19 | ||
20 | #define BOOST_HAS_THREADS | |
21 | ||
22 | #ifdef _LIBCPP_HAS_NO_VARIADICS | |
23 | # define BOOST_NO_CXX11_HDR_TUPLE | |
24 | #endif | |
25 | ||
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 | |
b32b8144 | 32 | # define BOOST_NO_CXX11_POINTER_TRAITS |
7c673cae FG |
33 | #endif |
34 | ||
35 | #if __cplusplus < 201103 | |
b32b8144 FG |
36 | // |
37 | // These two appear to be somewhat useable in C++03 mode, there may be others... | |
38 | // | |
39 | //# define BOOST_NO_CXX11_HDR_ARRAY | |
40 | //# define BOOST_NO_CXX11_HDR_FORWARD_LIST | |
41 | ||
7c673cae FG |
42 | # define BOOST_NO_CXX11_HDR_CODECVT |
43 | # define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE | |
92f5a8d4 | 44 | # define BOOST_NO_CXX11_HDR_EXCEPTION |
7c673cae FG |
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 | |
b32b8144 | 58 | # define BOOST_NO_CXX11_POINTER_TRAITS |
7c673cae FG |
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 | |
69 | // | |
70 | // These appear to be unusable/incomplete so far: | |
71 | // | |
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 | |
77 | #endif | |
78 | ||
79 | ||
80 | #if _LIBCPP_VERSION < 3700 | |
81 | // libc++ uses a non-standard messages_base | |
82 | #define BOOST_NO_STD_MESSAGES | |
b32b8144 FG |
83 | #endif |
84 | ||
85 | // C++14 features | |
86 | #if (_LIBCPP_VERSION < 3700) || (__cplusplus <= 201402L) | |
87 | # define BOOST_NO_CXX14_STD_EXCHANGE | |
88 | #endif | |
89 | ||
7c673cae | 90 | // C++17 features |
b32b8144 FG |
91 | #if (_LIBCPP_VERSION < 4000) || (__cplusplus <= 201402L) |
92 | # define BOOST_NO_CXX17_STD_APPLY | |
92f5a8d4 TL |
93 | # define BOOST_NO_CXX17_HDR_OPTIONAL |
94 | # define BOOST_NO_CXX17_HDR_STRING_VIEW | |
95 | # define BOOST_NO_CXX17_HDR_VARIANT | |
b32b8144 FG |
96 | #endif |
97 | #if (_LIBCPP_VERSION > 4000) && (__cplusplus > 201402L) && !defined(_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR) | |
98 | # define BOOST_NO_AUTO_PTR | |
7c673cae | 99 | #endif |
b32b8144 FG |
100 | #if (_LIBCPP_VERSION > 4000) && (__cplusplus > 201402L) && !defined(_LIBCPP_ENABLE_CXX17_REMOVED_RANDOM_SHUFFLE) |
101 | # define BOOST_NO_CXX98_RANDOM_SHUFFLE | |
102 | #endif | |
103 | #if (_LIBCPP_VERSION > 4000) && (__cplusplus > 201402L) && !defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS) | |
104 | # define BOOST_NO_CXX98_BINDERS | |
105 | #endif | |
106 | ||
107 | #define BOOST_NO_CXX17_ITERATOR_TRAITS | |
92f5a8d4 | 108 | #define BOOST_NO_CXX17_STD_INVOKE // Invoke support is incomplete (no invoke_result) |
7c673cae FG |
109 | |
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 | |
116 | #endif | |
117 | ||
92f5a8d4 | 118 | #if defined(__linux__) && (_LIBCPP_VERSION < 6000) && !defined(BOOST_NO_CXX11_THREAD_LOCAL) |
11fdf7f2 TL |
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`. | |
92f5a8d4 TL |
122 | // |
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. | |
11fdf7f2 TL |
128 | # define BOOST_NO_CXX11_THREAD_LOCAL |
129 | #endif | |
130 | ||
7c673cae FG |
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 | |
136 | #endif | |
137 | #elif __cplusplus < 201402 | |
138 | # define BOOST_NO_CXX14_HDR_SHARED_MUTEX | |
139 | #endif | |
140 | ||
92f5a8d4 TL |
141 | #if !defined(BOOST_NO_CXX14_HDR_SHARED_MUTEX) && (_LIBCPP_VERSION < 5000) |
142 | # define BOOST_NO_CXX14_HDR_SHARED_MUTEX | |
143 | #endif | |
144 | ||
7c673cae | 145 | // --- end --- |