]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/boost/config/stdlib/libcpp.hpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / boost / config / stdlib / libcpp.hpp
CommitLineData
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 ---