blob: a051dbb750249e5e9cdcd0326b2078e7fc325f78 [file] [log] [blame]
Brian Silverman9d8fa392018-08-04 17:09:24 -07001// (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
32# define BOOST_NO_CXX11_POINTER_TRAITS
33#endif
34
35#if __cplusplus < 201103
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
42# define BOOST_NO_CXX11_HDR_CODECVT
43# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
44# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
45# define BOOST_NO_CXX11_HDR_MUTEX
46# define BOOST_NO_CXX11_HDR_RANDOM
47# define BOOST_NO_CXX11_HDR_RATIO
48# define BOOST_NO_CXX11_HDR_REGEX
49# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
50# define BOOST_NO_CXX11_HDR_THREAD
51# define BOOST_NO_CXX11_HDR_TUPLE
52# define BOOST_NO_CXX11_HDR_TYPEINDEX
53# define BOOST_NO_CXX11_HDR_UNORDERED_MAP
54# define BOOST_NO_CXX11_HDR_UNORDERED_SET
55# define BOOST_NO_CXX11_NUMERIC_LIMITS
56# define BOOST_NO_CXX11_ALLOCATOR
57# define BOOST_NO_CXX11_POINTER_TRAITS
58# define BOOST_NO_CXX11_SMART_PTR
59# define BOOST_NO_CXX11_HDR_FUNCTIONAL
60# define BOOST_NO_CXX11_STD_ALIGN
61# define BOOST_NO_CXX11_ADDRESSOF
62# define BOOST_NO_CXX11_HDR_ATOMIC
63# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
64# define BOOST_NO_CXX11_HDR_CHRONO
65# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
66# define BOOST_NO_CXX11_HDR_FUTURE
67#elif _LIBCPP_VERSION < 3700
68//
69// These appear to be unusable/incomplete so far:
70//
71# define BOOST_NO_CXX11_HDR_ATOMIC
72# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
73# define BOOST_NO_CXX11_HDR_CHRONO
74# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
75# define BOOST_NO_CXX11_HDR_FUTURE
76#endif
77
78
79#if _LIBCPP_VERSION < 3700
80// libc++ uses a non-standard messages_base
81#define BOOST_NO_STD_MESSAGES
82#endif
83
84// C++14 features
85#if (_LIBCPP_VERSION < 3700) || (__cplusplus <= 201402L)
86# define BOOST_NO_CXX14_STD_EXCHANGE
87#endif
88
89// C++17 features
90#if (_LIBCPP_VERSION < 4000) || (__cplusplus <= 201402L)
91# define BOOST_NO_CXX17_STD_APPLY
92#endif
93#if (_LIBCPP_VERSION > 4000) && (__cplusplus > 201402L) && !defined(_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR)
94# define BOOST_NO_AUTO_PTR
95#endif
96#if (_LIBCPP_VERSION > 4000) && (__cplusplus > 201402L) && !defined(_LIBCPP_ENABLE_CXX17_REMOVED_RANDOM_SHUFFLE)
97# define BOOST_NO_CXX98_RANDOM_SHUFFLE
98#endif
99#if (_LIBCPP_VERSION > 4000) && (__cplusplus > 201402L) && !defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS)
100# define BOOST_NO_CXX98_BINDERS
101#endif
102
103#define BOOST_NO_CXX17_ITERATOR_TRAITS
104#define BOOST_NO_CXX17_STD_INVOKE // Invoke support is incomplete (no invoke_result)
105
106#if (_LIBCPP_VERSION <= 1101) && !defined(BOOST_NO_CXX11_THREAD_LOCAL)
107// This is a bit of a sledgehammer, because really it's just libc++abi that has no
108// support for thread_local, leading to linker errors such as
109// "undefined reference to `__cxa_thread_atexit'". It is fixed in the
110// most recent releases of libc++abi though...
111# define BOOST_NO_CXX11_THREAD_LOCAL
112#endif
113
114#if defined(__linux__) && !defined(BOOST_NO_CXX11_THREAD_LOCAL)
115// After libc++-dev is installed on Trusty, clang++-libc++ almost works,
116// except uses of `thread_local` fail with undefined reference to
117// `__cxa_thread_atexit`.
118# define BOOST_NO_CXX11_THREAD_LOCAL
119#endif
120
121#if defined(__has_include)
122#if !__has_include(<shared_mutex>)
123# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
124#elif __cplusplus <= 201103
125# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
126#endif
127#elif __cplusplus < 201402
128# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
129#endif
130
131// --- end ---