1 | // Boost config.hpp configuration header file ------------------------------// |
2 | // boostinspect:ndprecated_macros -- tell the inspect tool to ignore this file |
3 | |
4 | // Copyright (c) 2001-2003 John Maddock |
5 | // Copyright (c) 2001 Darin Adler |
6 | // Copyright (c) 2001 Peter Dimov |
7 | // Copyright (c) 2002 Bill Kempf |
8 | // Copyright (c) 2002 Jens Maurer |
9 | // Copyright (c) 2002-2003 David Abrahams |
10 | // Copyright (c) 2003 Gennaro Prota |
11 | // Copyright (c) 2003 Eric Friedman |
12 | // Copyright (c) 2010 Eric Jourdanneau, Joel Falcou |
13 | // Distributed under the Boost Software License, Version 1.0. (See |
14 | // accompanying file LICENSE_1_0.txt or copy at |
15 | // http://www.boost.org/LICENSE_1_0.txt) |
16 | |
17 | // See http://www.boost.org/ for most recent version. |
18 | |
19 | // Boost config.hpp policy and rationale documentation has been moved to |
20 | // http://www.boost.org/libs/config/ |
21 | // |
22 | // This file is intended to be stable, and relatively unchanging. |
23 | // It should contain boilerplate code only - no compiler specific |
24 | // code unless it is unavoidable - no changes unless unavoidable. |
25 | |
26 | #ifndef BOOST_CONFIG_SUFFIX_HPP |
27 | #define BOOST_CONFIG_SUFFIX_HPP |
28 | |
29 | #if defined(__GNUC__) && (__GNUC__ >= 4) |
30 | // |
31 | // Some GCC-4.x versions issue warnings even when __extension__ is used, |
32 | // so use this as a workaround: |
33 | // |
34 | #pragma GCC system_header |
35 | #endif |
36 | |
37 | // |
38 | // ensure that visibility macros are always defined, thus simplifying use |
39 | // |
40 | #ifndef BOOST_SYMBOL_EXPORT |
41 | # define BOOST_SYMBOL_EXPORT |
42 | #endif |
43 | #ifndef BOOST_SYMBOL_IMPORT |
44 | # define BOOST_SYMBOL_IMPORT |
45 | #endif |
46 | #ifndef BOOST_SYMBOL_VISIBLE |
47 | # define BOOST_SYMBOL_VISIBLE |
48 | #endif |
49 | |
50 | // |
51 | // disable explicitly enforced visibility |
52 | // |
53 | #if defined(BOOST_DISABLE_EXPLICIT_SYMBOL_VISIBILITY) |
54 | |
55 | #undef BOOST_SYMBOL_EXPORT |
56 | #define BOOST_SYMBOL_EXPORT |
57 | |
58 | #undef BOOST_SYMBOL_IMPORT |
59 | #define BOOST_SYMBOL_IMPORT |
60 | |
61 | #undef BOOST_SYMBOL_VISIBLE |
62 | #define BOOST_SYMBOL_VISIBLE |
63 | |
64 | #endif |
65 | |
66 | // |
67 | // look for long long by looking for the appropriate macros in <limits.h>. |
68 | // Note that we use limits.h rather than climits for maximal portability, |
69 | // remember that since these just declare a bunch of macros, there should be |
70 | // no namespace issues from this. |
71 | // |
72 | #if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG) \ |
73 | && !defined(BOOST_MSVC) && !defined(BOOST_BORLANDC) |
74 | # include <limits.h> |
75 | # if (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX)) |
76 | # define BOOST_HAS_LONG_LONG |
77 | # else |
78 | # define BOOST_NO_LONG_LONG |
79 | # endif |
80 | #endif |
81 | |
82 | // GCC 3.x will clean up all of those nasty macro definitions that |
83 | // BOOST_NO_CTYPE_FUNCTIONS is intended to help work around, so undefine |
84 | // it under GCC 3.x. |
85 | #if defined(__GNUC__) && (__GNUC__ >= 3) && defined(BOOST_NO_CTYPE_FUNCTIONS) |
86 | # undef BOOST_NO_CTYPE_FUNCTIONS |
87 | #endif |
88 | |
89 | // |
90 | // Assume any extensions are in namespace std:: unless stated otherwise: |
91 | // |
92 | # ifndef BOOST_STD_EXTENSION_NAMESPACE |
93 | # define BOOST_STD_EXTENSION_NAMESPACE std |
94 | # endif |
95 | |
96 | // |
97 | // If cv-qualified specializations are not allowed, then neither are cv-void ones: |
98 | // |
99 | # if defined(BOOST_NO_CV_SPECIALIZATIONS) \ |
100 | && !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS) |
101 | # define BOOST_NO_CV_VOID_SPECIALIZATIONS |
102 | # endif |
103 | |
104 | // |
105 | // If there is no numeric_limits template, then it can't have any compile time |
106 | // constants either! |
107 | // |
108 | # if defined(BOOST_NO_LIMITS) \ |
109 | && !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) |
110 | # define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS |
111 | # define BOOST_NO_MS_INT64_NUMERIC_LIMITS |
112 | # define BOOST_NO_LONG_LONG_NUMERIC_LIMITS |
113 | # endif |
114 | |
115 | // |
116 | // if there is no long long then there is no specialisation |
117 | // for numeric_limits<long long> either: |
118 | // |
119 | #if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS) |
120 | # define BOOST_NO_LONG_LONG_NUMERIC_LIMITS |
121 | #endif |
122 | |
123 | // |
124 | // if there is no __int64 then there is no specialisation |
125 | // for numeric_limits<__int64> either: |
126 | // |
127 | #if !defined(BOOST_HAS_MS_INT64) && !defined(BOOST_NO_MS_INT64_NUMERIC_LIMITS) |
128 | # define BOOST_NO_MS_INT64_NUMERIC_LIMITS |
129 | #endif |
130 | |
131 | // |
132 | // if member templates are supported then so is the |
133 | // VC6 subset of member templates: |
134 | // |
135 | # if !defined(BOOST_NO_MEMBER_TEMPLATES) \ |
136 | && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) |
137 | # define BOOST_MSVC6_MEMBER_TEMPLATES |
138 | # endif |
139 | |
140 | // |
141 | // Without partial specialization, can't test for partial specialisation bugs: |
142 | // |
143 | # if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ |
144 | && !defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG) |
145 | # define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG |
146 | # endif |
147 | |
148 | // |
149 | // Without partial specialization, we can't have array-type partial specialisations: |
150 | // |
151 | # if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ |
152 | && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS) |
153 | # define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS |
154 | # endif |
155 | |
156 | // |
157 | // Without partial specialization, std::iterator_traits can't work: |
158 | // |
159 | # if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ |
160 | && !defined(BOOST_NO_STD_ITERATOR_TRAITS) |
161 | # define BOOST_NO_STD_ITERATOR_TRAITS |
162 | # endif |
163 | |
164 | // |
165 | // Without partial specialization, partial |
166 | // specialization with default args won't work either: |
167 | // |
168 | # if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ |
169 | && !defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS) |
170 | # define BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS |
171 | # endif |
172 | |
173 | // |
174 | // Without member template support, we can't have template constructors |
175 | // in the standard library either: |
176 | // |
177 | # if defined(BOOST_NO_MEMBER_TEMPLATES) \ |
178 | && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \ |
179 | && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) |
180 | # define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS |
181 | # endif |
182 | |
183 | // |
184 | // Without member template support, we can't have a conforming |
185 | // std::allocator template either: |
186 | // |
187 | # if defined(BOOST_NO_MEMBER_TEMPLATES) \ |
188 | && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \ |
189 | && !defined(BOOST_NO_STD_ALLOCATOR) |
190 | # define BOOST_NO_STD_ALLOCATOR |
191 | # endif |
192 | |
193 | // |
194 | // without ADL support then using declarations will break ADL as well: |
195 | // |
196 | #if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL) |
197 | # define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL |
198 | #endif |
199 | |
200 | // |
201 | // Without typeid support we have no dynamic RTTI either: |
202 | // |
203 | #if defined(BOOST_NO_TYPEID) && !defined(BOOST_NO_RTTI) |
204 | # define BOOST_NO_RTTI |
205 | #endif |
206 | |
207 | // |
208 | // If we have a standard allocator, then we have a partial one as well: |
209 | // |
210 | #if !defined(BOOST_NO_STD_ALLOCATOR) |
211 | # define BOOST_HAS_PARTIAL_STD_ALLOCATOR |
212 | #endif |
213 | |
214 | // |
215 | // We can't have a working std::use_facet if there is no std::locale: |
216 | // |
217 | # if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_USE_FACET) |
218 | # define BOOST_NO_STD_USE_FACET |
219 | # endif |
220 | |
221 | // |
222 | // We can't have a std::messages facet if there is no std::locale: |
223 | // |
224 | # if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_MESSAGES) |
225 | # define BOOST_NO_STD_MESSAGES |
226 | # endif |
227 | |
228 | // |
229 | // We can't have a working std::wstreambuf if there is no std::locale: |
230 | // |
231 | # if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_WSTREAMBUF) |
232 | # define BOOST_NO_STD_WSTREAMBUF |
233 | # endif |
234 | |
235 | // |
236 | // We can't have a <cwctype> if there is no <cwchar>: |
237 | // |
238 | # if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_CWCTYPE) |
239 | # define BOOST_NO_CWCTYPE |
240 | # endif |
241 | |
242 | // |
243 | // We can't have a swprintf if there is no <cwchar>: |
244 | // |
245 | # if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_SWPRINTF) |
246 | # define BOOST_NO_SWPRINTF |
247 | # endif |
248 | |
249 | // |
250 | // If Win32 support is turned off, then we must turn off |
251 | // threading support also, unless there is some other |
252 | // thread API enabled: |
253 | // |
254 | #if defined(BOOST_DISABLE_WIN32) && defined(_WIN32) \ |
255 | && !defined(BOOST_DISABLE_THREADS) && !defined(BOOST_HAS_PTHREADS) |
256 | # define BOOST_DISABLE_THREADS |
257 | #endif |
258 | |
259 | // |
260 | // Turn on threading support if the compiler thinks that it's in |
261 | // multithreaded mode. We put this here because there are only a |
262 | // limited number of macros that identify this (if there's any missing |
263 | // from here then add to the appropriate compiler section): |
264 | // |
265 | #if (defined(__MT__) || defined(_MT) || defined(_REENTRANT) \ |
266 | || defined(_PTHREADS) || defined(__APPLE__) || defined(__DragonFly__)) \ |
267 | && !defined(BOOST_HAS_THREADS) |
268 | # define BOOST_HAS_THREADS |
269 | #endif |
270 | |
271 | // |
272 | // Turn threading support off if BOOST_DISABLE_THREADS is defined: |
273 | // |
274 | #if defined(BOOST_DISABLE_THREADS) && defined(BOOST_HAS_THREADS) |
275 | # undef BOOST_HAS_THREADS |
276 | #endif |
277 | |
278 | // |
279 | // Turn threading support off if we don't recognise the threading API: |
280 | // |
281 | #if defined(BOOST_HAS_THREADS) && !defined(BOOST_HAS_PTHREADS)\ |
282 | && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_BETHREADS)\ |
283 | && !defined(BOOST_HAS_MPTASKS) |
284 | # undef BOOST_HAS_THREADS |
285 | #endif |
286 | |
287 | // |
288 | // Turn threading detail macros off if we don't (want to) use threading |
289 | // |
290 | #ifndef BOOST_HAS_THREADS |
291 | # undef BOOST_HAS_PTHREADS |
292 | # undef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE |
293 | # undef BOOST_HAS_PTHREAD_YIELD |
294 | # undef BOOST_HAS_PTHREAD_DELAY_NP |
295 | # undef BOOST_HAS_WINTHREADS |
296 | # undef BOOST_HAS_BETHREADS |
297 | # undef BOOST_HAS_MPTASKS |
298 | #endif |
299 | |
300 | // |
301 | // If the compiler claims to be C99 conformant, then it had better |
302 | // have a <stdint.h>: |
303 | // |
304 | # if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901) |
305 | # define BOOST_HAS_STDINT_H |
306 | # ifndef BOOST_HAS_LOG1P |
307 | # define BOOST_HAS_LOG1P |
308 | # endif |
309 | # ifndef BOOST_HAS_EXPM1 |
310 | # define BOOST_HAS_EXPM1 |
311 | # endif |
312 | # endif |
313 | |
314 | // |
315 | // Define BOOST_NO_SLIST and BOOST_NO_HASH if required. |
316 | // Note that this is for backwards compatibility only. |
317 | // |
318 | # if !defined(BOOST_HAS_SLIST) && !defined(BOOST_NO_SLIST) |
319 | # define BOOST_NO_SLIST |
320 | # endif |
321 | |
322 | # if !defined(BOOST_HAS_HASH) && !defined(BOOST_NO_HASH) |
323 | # define BOOST_NO_HASH |
324 | # endif |
325 | |
326 | // |
327 | // Set BOOST_SLIST_HEADER if not set already: |
328 | // |
329 | #if defined(BOOST_HAS_SLIST) && !defined(BOOST_SLIST_HEADER) |
330 | # define BOOST_SLIST_HEADER <slist> |
331 | #endif |
332 | |
333 | // |
334 | // Set BOOST_HASH_SET_HEADER if not set already: |
335 | // |
336 | #if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_SET_HEADER) |
337 | # define BOOST_HASH_SET_HEADER <hash_set> |
338 | #endif |
339 | |
340 | // |
341 | // Set BOOST_HASH_MAP_HEADER if not set already: |
342 | // |
343 | #if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_MAP_HEADER) |
344 | # define BOOST_HASH_MAP_HEADER <hash_map> |
345 | #endif |
346 | |
347 | // BOOST_HAS_ABI_HEADERS |
348 | // This macro gets set if we have headers that fix the ABI, |
349 | // and prevent ODR violations when linking to external libraries: |
350 | #if defined(BOOST_ABI_PREFIX) && defined(BOOST_ABI_SUFFIX) && !defined(BOOST_HAS_ABI_HEADERS) |
351 | # define BOOST_HAS_ABI_HEADERS |
352 | #endif |
353 | |
354 | #if defined(BOOST_HAS_ABI_HEADERS) && defined(BOOST_DISABLE_ABI_HEADERS) |
355 | # undef BOOST_HAS_ABI_HEADERS |
356 | #endif |
357 | |
358 | // BOOST_NO_STDC_NAMESPACE workaround --------------------------------------// |
359 | // Because std::size_t usage is so common, even in boost headers which do not |
360 | // otherwise use the C library, the <cstddef> workaround is included here so |
361 | // that ugly workaround code need not appear in many other boost headers. |
362 | // NOTE WELL: This is a workaround for non-conforming compilers; <cstddef> |
363 | // must still be #included in the usual places so that <cstddef> inclusion |
364 | // works as expected with standard conforming compilers. The resulting |
365 | // double inclusion of <cstddef> is harmless. |
366 | |
367 | # if defined(BOOST_NO_STDC_NAMESPACE) && defined(__cplusplus) |
368 | # include <cstddef> |
369 | namespace std { using ::ptrdiff_t; using ::size_t; } |
370 | # endif |
371 | |
372 | // Workaround for the unfortunate min/max macros defined by some platform headers |
373 | |
374 | #define BOOST_PREVENT_MACRO_SUBSTITUTION |
375 | |
376 | #ifndef BOOST_USING_STD_MIN |
377 | # define BOOST_USING_STD_MIN() using std::min |
378 | #endif |
379 | |
380 | #ifndef BOOST_USING_STD_MAX |
381 | # define BOOST_USING_STD_MAX() using std::max |
382 | #endif |
383 | |
384 | // BOOST_NO_STD_MIN_MAX workaround -----------------------------------------// |
385 | |
386 | # if defined(BOOST_NO_STD_MIN_MAX) && defined(__cplusplus) |
387 | |
388 | namespace std { |
389 | template <class _Tp> |
390 | inline const _Tp& min BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) { |
391 | return __b < __a ? __b : __a; |
392 | } |
393 | template <class _Tp> |
394 | inline const _Tp& max BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) { |
395 | return __a < __b ? __b : __a; |
396 | } |
397 | } |
398 | |
399 | # endif |
400 | |
401 | // BOOST_STATIC_CONSTANT workaround --------------------------------------- // |
402 | // On compilers which don't allow in-class initialization of static integral |
403 | // constant members, we must use enums as a workaround if we want the constants |
404 | // to be available at compile-time. This macro gives us a convenient way to |
405 | // declare such constants. |
406 | |
407 | # ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION |
408 | # define BOOST_STATIC_CONSTANT(type, assignment) enum { assignment } |
409 | # else |
410 | # define BOOST_STATIC_CONSTANT(type, assignment) static const type assignment |
411 | # endif |
412 | |
413 | // BOOST_USE_FACET / HAS_FACET workaround ----------------------------------// |
414 | // When the standard library does not have a conforming std::use_facet there |
415 | // are various workarounds available, but they differ from library to library. |
416 | // The same problem occurs with has_facet. |
417 | // These macros provide a consistent way to access a locale's facets. |
418 | // Usage: |
419 | // replace |
420 | // std::use_facet<Type>(loc); |
421 | // with |
422 | // BOOST_USE_FACET(Type, loc); |
423 | // Note do not add a std:: prefix to the front of BOOST_USE_FACET! |
424 | // Use for BOOST_HAS_FACET is analogous. |
425 | |
426 | #if defined(BOOST_NO_STD_USE_FACET) |
427 | # ifdef BOOST_HAS_TWO_ARG_USE_FACET |
428 | # define BOOST_USE_FACET(Type, loc) std::use_facet(loc, static_cast<Type*>(0)) |
429 | # define BOOST_HAS_FACET(Type, loc) std::has_facet(loc, static_cast<Type*>(0)) |
430 | # elif defined(BOOST_HAS_MACRO_USE_FACET) |
431 | # define BOOST_USE_FACET(Type, loc) std::_USE(loc, Type) |
432 | # define BOOST_HAS_FACET(Type, loc) std::_HAS(loc, Type) |
433 | # elif defined(BOOST_HAS_STLP_USE_FACET) |
434 | # define BOOST_USE_FACET(Type, loc) (*std::_Use_facet<Type >(loc)) |
435 | # define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc) |
436 | # endif |
437 | #else |
438 | # define BOOST_USE_FACET(Type, loc) std::use_facet< Type >(loc) |
439 | # define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc) |
440 | #endif |
441 | |
442 | // BOOST_NESTED_TEMPLATE workaround ------------------------------------------// |
443 | // Member templates are supported by some compilers even though they can't use |
444 | // the A::template member<U> syntax, as a workaround replace: |
445 | // |
446 | // typedef typename A::template rebind<U> binder; |
447 | // |
448 | // with: |
449 | // |
450 | // typedef typename A::BOOST_NESTED_TEMPLATE rebind<U> binder; |
451 | |
452 | #ifndef BOOST_NO_MEMBER_TEMPLATE_KEYWORD |
453 | # define BOOST_NESTED_TEMPLATE template |
454 | #else |
455 | # define BOOST_NESTED_TEMPLATE |
456 | #endif |
457 | |
458 | // BOOST_UNREACHABLE_RETURN(x) workaround -------------------------------------// |
459 | // Normally evaluates to nothing, unless BOOST_NO_UNREACHABLE_RETURN_DETECTION |
460 | // is defined, in which case it evaluates to return x; Use when you have a return |
461 | // statement that can never be reached. |
462 | |
463 | #ifndef BOOST_UNREACHABLE_RETURN |
464 | # ifdef BOOST_NO_UNREACHABLE_RETURN_DETECTION |
465 | # define BOOST_UNREACHABLE_RETURN(x) return x; |
466 | # else |
467 | # define BOOST_UNREACHABLE_RETURN(x) |
468 | # endif |
469 | #endif |
470 | |
471 | // BOOST_DEDUCED_TYPENAME workaround ------------------------------------------// |
472 | // |
473 | // Some compilers don't support the use of `typename' for dependent |
474 | // types in deduced contexts, e.g. |
475 | // |
476 | // template <class T> void f(T, typename T::type); |
477 | // ^^^^^^^^ |
478 | // Replace these declarations with: |
479 | // |
480 | // template <class T> void f(T, BOOST_DEDUCED_TYPENAME T::type); |
481 | |
482 | #ifndef BOOST_NO_DEDUCED_TYPENAME |
483 | # define BOOST_DEDUCED_TYPENAME typename |
484 | #else |
485 | # define BOOST_DEDUCED_TYPENAME |
486 | #endif |
487 | |
488 | #ifndef BOOST_NO_TYPENAME_WITH_CTOR |
489 | # define BOOST_CTOR_TYPENAME typename |
490 | #else |
491 | # define BOOST_CTOR_TYPENAME |
492 | #endif |
493 | |
494 | // |
495 | // If we're on a CUDA device (note DEVICE not HOST, irrespective of compiler) then disable __int128 and __float128 support if present: |
496 | // |
497 | #if defined(__CUDA_ARCH__) && defined(BOOST_HAS_FLOAT128) |
498 | # undef BOOST_HAS_FLOAT128 |
499 | #endif |
500 | #if defined(__CUDA_ARCH__) && defined(BOOST_HAS_INT128) |
501 | # undef BOOST_HAS_INT128 |
502 | #endif |
503 | |
504 | // long long workaround ------------------------------------------// |
505 | // On gcc (and maybe other compilers?) long long is alway supported |
506 | // but it's use may generate either warnings (with -ansi), or errors |
507 | // (with -pedantic -ansi) unless it's use is prefixed by __extension__ |
508 | // |
509 | #if defined(BOOST_HAS_LONG_LONG) && defined(__cplusplus) |
510 | namespace boost{ |
511 | # ifdef __GNUC__ |
512 | __extension__ typedef long long long_long_type; |
513 | __extension__ typedef unsigned long long ulong_long_type; |
514 | # else |
515 | typedef long long long_long_type; |
516 | typedef unsigned long long ulong_long_type; |
517 | # endif |
518 | } |
519 | #endif |
520 | // same again for __int128: |
521 | #if defined(BOOST_HAS_INT128) && defined(__cplusplus) |
522 | namespace boost{ |
523 | # ifdef __GNUC__ |
524 | __extension__ typedef __int128 int128_type; |
525 | __extension__ typedef unsigned __int128 uint128_type; |
526 | # else |
527 | typedef __int128 int128_type; |
528 | typedef unsigned __int128 uint128_type; |
529 | # endif |
530 | } |
531 | #endif |
532 | // same again for __float128: |
533 | #if defined(BOOST_HAS_FLOAT128) && defined(__cplusplus) |
534 | namespace boost { |
535 | # ifdef __GNUC__ |
536 | __extension__ typedef __float128 float128_type; |
537 | # else |
538 | typedef __float128 float128_type; |
539 | # endif |
540 | } |
541 | #endif |
542 | |
543 | // BOOST_[APPEND_]EXPLICIT_TEMPLATE_[NON_]TYPE macros --------------------------// |
544 | |
545 | // These macros are obsolete. Port away and remove. |
546 | |
547 | # define BOOST_EXPLICIT_TEMPLATE_TYPE(t) |
548 | # define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t) |
549 | # define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v) |
550 | # define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) |
551 | |
552 | # define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t) |
553 | # define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t) |
554 | # define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v) |
555 | # define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) |
556 | |
557 | // When BOOST_NO_STD_TYPEINFO is defined, we can just import |
558 | // the global definition into std namespace, |
559 | // see https://svn.boost.org/trac10/ticket/4115 |
560 | #if defined(BOOST_NO_STD_TYPEINFO) && defined(__cplusplus) && defined(BOOST_MSVC) |
561 | #include <typeinfo> |
562 | namespace std{ using ::type_info; } |
563 | // Since we do now have typeinfo, undef the macro: |
564 | #undef BOOST_NO_STD_TYPEINFO |
565 | #endif |
566 | |
567 | // ---------------------------------------------------------------------------// |
568 | |
569 | // Helper macro BOOST_STRINGIZE: |
570 | // Helper macro BOOST_JOIN: |
571 | |
572 | #include <boost/config/helper_macros.hpp> |
573 | |
574 | // |
575 | // Set some default values for compiler/library/platform names. |
576 | // These are for debugging config setup only: |
577 | // |
578 | # ifndef BOOST_COMPILER |
579 | # define BOOST_COMPILER "Unknown ISO C++ Compiler" |
580 | # endif |
581 | # ifndef BOOST_STDLIB |
582 | # define BOOST_STDLIB "Unknown ISO standard library" |
583 | # endif |
584 | # ifndef BOOST_PLATFORM |
585 | # if defined(unix) || defined(__unix) || defined(_XOPEN_SOURCE) \ |
586 | || defined(_POSIX_SOURCE) |
587 | # define BOOST_PLATFORM "Generic Unix" |
588 | # else |
589 | # define BOOST_PLATFORM "Unknown" |
590 | # endif |
591 | # endif |
592 | |
593 | // |
594 | // Set some default values GPU support |
595 | // |
596 | # ifndef BOOST_GPU_ENABLED |
597 | # define BOOST_GPU_ENABLED |
598 | # endif |
599 | |
600 | // BOOST_RESTRICT ---------------------------------------------// |
601 | // Macro to use in place of 'restrict' keyword variants |
602 | #if !defined(BOOST_RESTRICT) |
603 | # if defined(_MSC_VER) |
604 | # define BOOST_RESTRICT __restrict |
605 | # if !defined(BOOST_NO_RESTRICT_REFERENCES) && (_MSC_FULL_VER < 190023026) |
606 | # define BOOST_NO_RESTRICT_REFERENCES |
607 | # endif |
608 | # elif defined(__GNUC__) && __GNUC__ > 3 |
609 | // Clang also defines __GNUC__ (as 4) |
610 | # define BOOST_RESTRICT __restrict__ |
611 | # else |
612 | # define BOOST_RESTRICT |
613 | # if !defined(BOOST_NO_RESTRICT_REFERENCES) |
614 | # define BOOST_NO_RESTRICT_REFERENCES |
615 | # endif |
616 | # endif |
617 | #endif |
618 | |
619 | // BOOST_MAY_ALIAS -----------------------------------------------// |
620 | // The macro expands to an attribute to mark a type that is allowed to alias other types. |
621 | // The macro is defined in the compiler-specific headers. |
622 | #if !defined(BOOST_MAY_ALIAS) |
623 | # define BOOST_NO_MAY_ALIAS |
624 | # define BOOST_MAY_ALIAS |
625 | #endif |
626 | |
627 | // BOOST_FORCEINLINE ---------------------------------------------// |
628 | // Macro to use in place of 'inline' to force a function to be inline |
629 | #if !defined(BOOST_FORCEINLINE) |
630 | # if defined(_MSC_VER) |
631 | # define BOOST_FORCEINLINE __forceinline |
632 | # elif defined(__GNUC__) && __GNUC__ > 3 |
633 | // Clang also defines __GNUC__ (as 4) |
634 | # define BOOST_FORCEINLINE inline __attribute__ ((__always_inline__)) |
635 | # else |
636 | # define BOOST_FORCEINLINE inline |
637 | # endif |
638 | #endif |
639 | |
640 | // BOOST_NOINLINE ---------------------------------------------// |
641 | // Macro to use in place of 'inline' to prevent a function to be inlined |
642 | #if !defined(BOOST_NOINLINE) |
643 | # if defined(_MSC_VER) |
644 | # define BOOST_NOINLINE __declspec(noinline) |
645 | # elif defined(__GNUC__) && __GNUC__ > 3 |
646 | // Clang also defines __GNUC__ (as 4) |
647 | # if defined(__CUDACC__) |
648 | // nvcc doesn't always parse __noinline__, |
649 | // see: https://svn.boost.org/trac/boost/ticket/9392 |
650 | # define BOOST_NOINLINE __attribute__ ((noinline)) |
651 | # elif defined(__HIP__) |
652 | // See https://github.com/boostorg/config/issues/392 |
653 | # define BOOST_NOINLINE __attribute__ ((noinline)) |
654 | # else |
655 | # define BOOST_NOINLINE __attribute__ ((__noinline__)) |
656 | # endif |
657 | # else |
658 | # define BOOST_NOINLINE |
659 | # endif |
660 | #endif |
661 | |
662 | // BOOST_NORETURN ---------------------------------------------// |
663 | // Macro to use before a function declaration/definition to designate |
664 | // the function as not returning normally (i.e. with a return statement |
665 | // or by leaving the function scope, if the function return type is void). |
666 | #if !defined(BOOST_NORETURN) |
667 | # if defined(_MSC_VER) |
668 | # define BOOST_NORETURN __declspec(noreturn) |
669 | # elif defined(__GNUC__) || defined(__CODEGEARC__) && defined(__clang__) |
670 | # define BOOST_NORETURN __attribute__ ((__noreturn__)) |
671 | # elif defined(__has_attribute) && defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x5130) |
672 | # if __has_attribute(noreturn) |
673 | # define BOOST_NORETURN [[noreturn]] |
674 | # endif |
675 | # elif defined(__has_cpp_attribute) |
676 | # if __has_cpp_attribute(noreturn) |
677 | # define BOOST_NORETURN [[noreturn]] |
678 | # endif |
679 | # endif |
680 | #endif |
681 | |
682 | #if !defined(BOOST_NORETURN) |
683 | # define BOOST_NO_NORETURN |
684 | # define BOOST_NORETURN |
685 | #endif |
686 | |
687 | // BOOST_DEPRECATED -------------------------------------------// |
688 | // The macro can be used to mark deprecated symbols, such as functions, objects and types. |
689 | // Any code that uses these symbols will produce warnings, possibly with a message specified |
690 | // as an argument. The warnings can be suppressed by defining BOOST_ALLOW_DEPRECATED_SYMBOLS |
691 | // or BOOST_ALLOW_DEPRECATED. |
692 | #if !defined(BOOST_DEPRECATED) && __cplusplus >= 201402 |
693 | #define BOOST_DEPRECATED(msg) [[deprecated(msg)]] |
694 | #endif |
695 | |
696 | #if defined(BOOST_ALLOW_DEPRECATED_SYMBOLS) || defined(BOOST_ALLOW_DEPRECATED) |
697 | #undef BOOST_DEPRECATED |
698 | #endif |
699 | |
700 | #if !defined(BOOST_DEPRECATED) |
701 | #define BOOST_DEPRECATED(msg) |
702 | #endif |
703 | |
704 | // Branch prediction hints |
705 | // These macros are intended to wrap conditional expressions that yield true or false |
706 | // |
707 | // if (BOOST_LIKELY(var == 10)) |
708 | // { |
709 | // // the most probable code here |
710 | // } |
711 | // |
712 | #if !defined(BOOST_LIKELY) |
713 | # define BOOST_LIKELY(x) x |
714 | #endif |
715 | #if !defined(BOOST_UNLIKELY) |
716 | # define BOOST_UNLIKELY(x) x |
717 | #endif |
718 | |
719 | #if !defined(BOOST_NO_CXX11_OVERRIDE) |
720 | # define BOOST_OVERRIDE override |
721 | #else |
722 | # define BOOST_OVERRIDE |
723 | #endif |
724 | |
725 | // Type and data alignment specification |
726 | // |
727 | #if !defined(BOOST_ALIGNMENT) |
728 | # if !defined(BOOST_NO_CXX11_ALIGNAS) |
729 | # define BOOST_ALIGNMENT(x) alignas(x) |
730 | # elif defined(_MSC_VER) |
731 | # define BOOST_ALIGNMENT(x) __declspec(align(x)) |
732 | # elif defined(__GNUC__) |
733 | # define BOOST_ALIGNMENT(x) __attribute__ ((__aligned__(x))) |
734 | # else |
735 | # define BOOST_NO_ALIGNMENT |
736 | # define BOOST_ALIGNMENT(x) |
737 | # endif |
738 | #endif |
739 | |
740 | // Lack of non-public defaulted functions is implied by the lack of any defaulted functions |
741 | #if !defined(BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS) && defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) |
742 | # define BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS |
743 | #endif |
744 | |
745 | // Lack of defaulted moves is implied by the lack of either rvalue references or any defaulted functions |
746 | #if !defined(BOOST_NO_CXX11_DEFAULTED_MOVES) && (defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) || defined(BOOST_NO_CXX11_RVALUE_REFERENCES)) |
747 | # define BOOST_NO_CXX11_DEFAULTED_MOVES |
748 | #endif |
749 | |
750 | // Defaulted and deleted function declaration helpers |
751 | // These macros are intended to be inside a class definition. |
752 | // BOOST_DEFAULTED_FUNCTION accepts the function declaration and its |
753 | // body, which will be used if the compiler doesn't support defaulted functions. |
754 | // BOOST_DELETED_FUNCTION only accepts the function declaration. It |
755 | // will expand to a private function declaration, if the compiler doesn't support |
756 | // deleted functions. Because of this it is recommended to use BOOST_DELETED_FUNCTION |
757 | // in the end of the class definition. |
758 | // |
759 | // class my_class |
760 | // { |
761 | // public: |
762 | // // Default-constructible |
763 | // BOOST_DEFAULTED_FUNCTION(my_class(), {}) |
764 | // // Copying prohibited |
765 | // BOOST_DELETED_FUNCTION(my_class(my_class const&)) |
766 | // BOOST_DELETED_FUNCTION(my_class& operator= (my_class const&)) |
767 | // }; |
768 | // |
769 | #if !(defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) || defined(BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS)) |
770 | # define BOOST_DEFAULTED_FUNCTION(fun, body) fun = default; |
771 | #else |
772 | # define BOOST_DEFAULTED_FUNCTION(fun, body) fun body |
773 | #endif |
774 | |
775 | #if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) |
776 | # define BOOST_DELETED_FUNCTION(fun) fun = delete; |
777 | #else |
778 | # define BOOST_DELETED_FUNCTION(fun) private: fun; |
779 | #endif |
780 | |
781 | // |
782 | // Set BOOST_NO_DECLTYPE_N3276 when BOOST_NO_DECLTYPE is defined |
783 | // |
784 | #if defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_CXX11_DECLTYPE_N3276) |
785 | #define BOOST_NO_CXX11_DECLTYPE_N3276 BOOST_NO_CXX11_DECLTYPE |
786 | #endif |
787 | |
788 | // -------------------- Deprecated macros for 1.50 --------------------------- |
789 | // These will go away in a future release |
790 | |
791 | // Use BOOST_NO_CXX11_HDR_UNORDERED_SET or BOOST_NO_CXX11_HDR_UNORDERED_MAP |
792 | // instead of BOOST_NO_STD_UNORDERED |
793 | #if defined(BOOST_NO_CXX11_HDR_UNORDERED_MAP) || defined (BOOST_NO_CXX11_HDR_UNORDERED_SET) |
794 | # ifndef BOOST_NO_CXX11_STD_UNORDERED |
795 | # define BOOST_NO_CXX11_STD_UNORDERED |
796 | # endif |
797 | #endif |
798 | |
799 | // Use BOOST_NO_CXX11_HDR_INITIALIZER_LIST instead of BOOST_NO_INITIALIZER_LISTS |
800 | #if defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_INITIALIZER_LISTS) |
801 | # define BOOST_NO_INITIALIZER_LISTS |
802 | #endif |
803 | |
804 | // Use BOOST_NO_CXX11_HDR_ARRAY instead of BOOST_NO_0X_HDR_ARRAY |
805 | #if defined(BOOST_NO_CXX11_HDR_ARRAY) && !defined(BOOST_NO_0X_HDR_ARRAY) |
806 | # define BOOST_NO_0X_HDR_ARRAY |
807 | #endif |
808 | // Use BOOST_NO_CXX11_HDR_CHRONO instead of BOOST_NO_0X_HDR_CHRONO |
809 | #if defined(BOOST_NO_CXX11_HDR_CHRONO) && !defined(BOOST_NO_0X_HDR_CHRONO) |
810 | # define BOOST_NO_0X_HDR_CHRONO |
811 | #endif |
812 | // Use BOOST_NO_CXX11_HDR_CODECVT instead of BOOST_NO_0X_HDR_CODECVT |
813 | #if defined(BOOST_NO_CXX11_HDR_CODECVT) && !defined(BOOST_NO_0X_HDR_CODECVT) |
814 | # define BOOST_NO_0X_HDR_CODECVT |
815 | #endif |
816 | // Use BOOST_NO_CXX11_HDR_CONDITION_VARIABLE instead of BOOST_NO_0X_HDR_CONDITION_VARIABLE |
817 | #if defined(BOOST_NO_CXX11_HDR_CONDITION_VARIABLE) && !defined(BOOST_NO_0X_HDR_CONDITION_VARIABLE) |
818 | # define BOOST_NO_0X_HDR_CONDITION_VARIABLE |
819 | #endif |
820 | // Use BOOST_NO_CXX11_HDR_FORWARD_LIST instead of BOOST_NO_0X_HDR_FORWARD_LIST |
821 | #if defined(BOOST_NO_CXX11_HDR_FORWARD_LIST) && !defined(BOOST_NO_0X_HDR_FORWARD_LIST) |
822 | # define BOOST_NO_0X_HDR_FORWARD_LIST |
823 | #endif |
824 | // Use BOOST_NO_CXX11_HDR_FUTURE instead of BOOST_NO_0X_HDR_FUTURE |
825 | #if defined(BOOST_NO_CXX11_HDR_FUTURE) && !defined(BOOST_NO_0X_HDR_FUTURE) |
826 | # define BOOST_NO_0X_HDR_FUTURE |
827 | #endif |
828 | |
829 | // Use BOOST_NO_CXX11_HDR_INITIALIZER_LIST |
830 | // instead of BOOST_NO_0X_HDR_INITIALIZER_LIST or BOOST_NO_INITIALIZER_LISTS |
831 | #ifdef BOOST_NO_CXX11_HDR_INITIALIZER_LIST |
832 | # ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST |
833 | # define BOOST_NO_0X_HDR_INITIALIZER_LIST |
834 | # endif |
835 | # ifndef BOOST_NO_INITIALIZER_LISTS |
836 | # define BOOST_NO_INITIALIZER_LISTS |
837 | # endif |
838 | #endif |
839 | |
840 | // Use BOOST_NO_CXX11_HDR_MUTEX instead of BOOST_NO_0X_HDR_MUTEX |
841 | #if defined(BOOST_NO_CXX11_HDR_MUTEX) && !defined(BOOST_NO_0X_HDR_MUTEX) |
842 | # define BOOST_NO_0X_HDR_MUTEX |
843 | #endif |
844 | // Use BOOST_NO_CXX11_HDR_RANDOM instead of BOOST_NO_0X_HDR_RANDOM |
845 | #if defined(BOOST_NO_CXX11_HDR_RANDOM) && !defined(BOOST_NO_0X_HDR_RANDOM) |
846 | # define BOOST_NO_0X_HDR_RANDOM |
847 | #endif |
848 | // Use BOOST_NO_CXX11_HDR_RATIO instead of BOOST_NO_0X_HDR_RATIO |
849 | #if defined(BOOST_NO_CXX11_HDR_RATIO) && !defined(BOOST_NO_0X_HDR_RATIO) |
850 | # define BOOST_NO_0X_HDR_RATIO |
851 | #endif |
852 | // Use BOOST_NO_CXX11_HDR_REGEX instead of BOOST_NO_0X_HDR_REGEX |
853 | #if defined(BOOST_NO_CXX11_HDR_REGEX) && !defined(BOOST_NO_0X_HDR_REGEX) |
854 | # define BOOST_NO_0X_HDR_REGEX |
855 | #endif |
856 | // Use BOOST_NO_CXX11_HDR_SYSTEM_ERROR instead of BOOST_NO_0X_HDR_SYSTEM_ERROR |
857 | #if defined(BOOST_NO_CXX11_HDR_SYSTEM_ERROR) && !defined(BOOST_NO_0X_HDR_SYSTEM_ERROR) |
858 | # define BOOST_NO_0X_HDR_SYSTEM_ERROR |
859 | #endif |
860 | // Use BOOST_NO_CXX11_HDR_THREAD instead of BOOST_NO_0X_HDR_THREAD |
861 | #if defined(BOOST_NO_CXX11_HDR_THREAD) && !defined(BOOST_NO_0X_HDR_THREAD) |
862 | # define BOOST_NO_0X_HDR_THREAD |
863 | #endif |
864 | // Use BOOST_NO_CXX11_HDR_TUPLE instead of BOOST_NO_0X_HDR_TUPLE |
865 | #if defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_0X_HDR_TUPLE) |
866 | # define BOOST_NO_0X_HDR_TUPLE |
867 | #endif |
868 | // Use BOOST_NO_CXX11_HDR_TYPE_TRAITS instead of BOOST_NO_0X_HDR_TYPE_TRAITS |
869 | #if defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS) && !defined(BOOST_NO_0X_HDR_TYPE_TRAITS) |
870 | # define BOOST_NO_0X_HDR_TYPE_TRAITS |
871 | #endif |
872 | // Use BOOST_NO_CXX11_HDR_TYPEINDEX instead of BOOST_NO_0X_HDR_TYPEINDEX |
873 | #if defined(BOOST_NO_CXX11_HDR_TYPEINDEX) && !defined(BOOST_NO_0X_HDR_TYPEINDEX) |
874 | # define BOOST_NO_0X_HDR_TYPEINDEX |
875 | #endif |
876 | // Use BOOST_NO_CXX11_HDR_UNORDERED_MAP instead of BOOST_NO_0X_HDR_UNORDERED_MAP |
877 | #if defined(BOOST_NO_CXX11_HDR_UNORDERED_MAP) && !defined(BOOST_NO_0X_HDR_UNORDERED_MAP) |
878 | # define BOOST_NO_0X_HDR_UNORDERED_MAP |
879 | #endif |
880 | // Use BOOST_NO_CXX11_HDR_UNORDERED_SET instead of BOOST_NO_0X_HDR_UNORDERED_SET |
881 | #if defined(BOOST_NO_CXX11_HDR_UNORDERED_SET) && !defined(BOOST_NO_0X_HDR_UNORDERED_SET) |
882 | # define BOOST_NO_0X_HDR_UNORDERED_SET |
883 | #endif |
884 | |
885 | // ------------------ End of deprecated macros for 1.50 --------------------------- |
886 | |
887 | // -------------------- Deprecated macros for 1.51 --------------------------- |
888 | // These will go away in a future release |
889 | |
890 | // Use BOOST_NO_CXX11_AUTO_DECLARATIONS instead of BOOST_NO_AUTO_DECLARATIONS |
891 | #if defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) && !defined(BOOST_NO_AUTO_DECLARATIONS) |
892 | # define BOOST_NO_AUTO_DECLARATIONS |
893 | #endif |
894 | // Use BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS instead of BOOST_NO_AUTO_MULTIDECLARATIONS |
895 | #if defined(BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS) && !defined(BOOST_NO_AUTO_MULTIDECLARATIONS) |
896 | # define BOOST_NO_AUTO_MULTIDECLARATIONS |
897 | #endif |
898 | // Use BOOST_NO_CXX11_CHAR16_T instead of BOOST_NO_CHAR16_T |
899 | #if defined(BOOST_NO_CXX11_CHAR16_T) && !defined(BOOST_NO_CHAR16_T) |
900 | # define BOOST_NO_CHAR16_T |
901 | #endif |
902 | // Use BOOST_NO_CXX11_CHAR32_T instead of BOOST_NO_CHAR32_T |
903 | #if defined(BOOST_NO_CXX11_CHAR32_T) && !defined(BOOST_NO_CHAR32_T) |
904 | # define BOOST_NO_CHAR32_T |
905 | #endif |
906 | // Use BOOST_NO_CXX11_TEMPLATE_ALIASES instead of BOOST_NO_TEMPLATE_ALIASES |
907 | #if defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) && !defined(BOOST_NO_TEMPLATE_ALIASES) |
908 | # define BOOST_NO_TEMPLATE_ALIASES |
909 | #endif |
910 | // Use BOOST_NO_CXX11_CONSTEXPR instead of BOOST_NO_CONSTEXPR |
911 | #if defined(BOOST_NO_CXX11_CONSTEXPR) && !defined(BOOST_NO_CONSTEXPR) |
912 | # define BOOST_NO_CONSTEXPR |
913 | #endif |
914 | // Use BOOST_NO_CXX11_DECLTYPE_N3276 instead of BOOST_NO_DECLTYPE_N3276 |
915 | #if defined(BOOST_NO_CXX11_DECLTYPE_N3276) && !defined(BOOST_NO_DECLTYPE_N3276) |
916 | # define BOOST_NO_DECLTYPE_N3276 |
917 | #endif |
918 | // Use BOOST_NO_CXX11_DECLTYPE instead of BOOST_NO_DECLTYPE |
919 | #if defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_DECLTYPE) |
920 | # define BOOST_NO_DECLTYPE |
921 | #endif |
922 | // Use BOOST_NO_CXX11_DEFAULTED_FUNCTIONS instead of BOOST_NO_DEFAULTED_FUNCTIONS |
923 | #if defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) && !defined(BOOST_NO_DEFAULTED_FUNCTIONS) |
924 | # define BOOST_NO_DEFAULTED_FUNCTIONS |
925 | #endif |
926 | // Use BOOST_NO_CXX11_DELETED_FUNCTIONS instead of BOOST_NO_DELETED_FUNCTIONS |
927 | #if defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) && !defined(BOOST_NO_DELETED_FUNCTIONS) |
928 | # define BOOST_NO_DELETED_FUNCTIONS |
929 | #endif |
930 | // Use BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS instead of BOOST_NO_EXPLICIT_CONVERSION_OPERATORS |
931 | #if defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS) && !defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS) |
932 | # define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS |
933 | #endif |
934 | // Use BOOST_NO_CXX11_EXTERN_TEMPLATE instead of BOOST_NO_EXTERN_TEMPLATE |
935 | #if defined(BOOST_NO_CXX11_EXTERN_TEMPLATE) && !defined(BOOST_NO_EXTERN_TEMPLATE) |
936 | # define BOOST_NO_EXTERN_TEMPLATE |
937 | #endif |
938 | // Use BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS instead of BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS |
939 | #if defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS) && !defined(BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS) |
940 | # define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS |
941 | #endif |
942 | // Use BOOST_NO_CXX11_LAMBDAS instead of BOOST_NO_LAMBDAS |
943 | #if defined(BOOST_NO_CXX11_LAMBDAS) && !defined(BOOST_NO_LAMBDAS) |
944 | # define BOOST_NO_LAMBDAS |
945 | #endif |
946 | // Use BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS instead of BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS |
947 | #if defined(BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS) && !defined(BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS) |
948 | # define BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS |
949 | #endif |
950 | // Use BOOST_NO_CXX11_NOEXCEPT instead of BOOST_NO_NOEXCEPT |
951 | #if defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_NOEXCEPT) |
952 | # define BOOST_NO_NOEXCEPT |
953 | #endif |
954 | // Use BOOST_NO_CXX11_NULLPTR instead of BOOST_NO_NULLPTR |
955 | #if defined(BOOST_NO_CXX11_NULLPTR) && !defined(BOOST_NO_NULLPTR) |
956 | # define BOOST_NO_NULLPTR |
957 | #endif |
958 | // Use BOOST_NO_CXX11_RAW_LITERALS instead of BOOST_NO_RAW_LITERALS |
959 | #if defined(BOOST_NO_CXX11_RAW_LITERALS) && !defined(BOOST_NO_RAW_LITERALS) |
960 | # define BOOST_NO_RAW_LITERALS |
961 | #endif |
962 | // Use BOOST_NO_CXX11_RVALUE_REFERENCES instead of BOOST_NO_RVALUE_REFERENCES |
963 | #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_RVALUE_REFERENCES) |
964 | # define BOOST_NO_RVALUE_REFERENCES |
965 | #endif |
966 | // Use BOOST_NO_CXX11_SCOPED_ENUMS instead of BOOST_NO_SCOPED_ENUMS |
967 | #if defined(BOOST_NO_CXX11_SCOPED_ENUMS) && !defined(BOOST_NO_SCOPED_ENUMS) |
968 | # define BOOST_NO_SCOPED_ENUMS |
969 | #endif |
970 | // Use BOOST_NO_CXX11_STATIC_ASSERT instead of BOOST_NO_STATIC_ASSERT |
971 | #if defined(BOOST_NO_CXX11_STATIC_ASSERT) && !defined(BOOST_NO_STATIC_ASSERT) |
972 | # define BOOST_NO_STATIC_ASSERT |
973 | #endif |
974 | // Use BOOST_NO_CXX11_STD_UNORDERED instead of BOOST_NO_STD_UNORDERED |
975 | #if defined(BOOST_NO_CXX11_STD_UNORDERED) && !defined(BOOST_NO_STD_UNORDERED) |
976 | # define BOOST_NO_STD_UNORDERED |
977 | #endif |
978 | // Use BOOST_NO_CXX11_UNICODE_LITERALS instead of BOOST_NO_UNICODE_LITERALS |
979 | #if defined(BOOST_NO_CXX11_UNICODE_LITERALS) && !defined(BOOST_NO_UNICODE_LITERALS) |
980 | # define BOOST_NO_UNICODE_LITERALS |
981 | #endif |
982 | // Use BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX instead of BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX |
983 | #if defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) && !defined(BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX) |
984 | # define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX |
985 | #endif |
986 | // Use BOOST_NO_CXX11_VARIADIC_TEMPLATES instead of BOOST_NO_VARIADIC_TEMPLATES |
987 | #if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_VARIADIC_TEMPLATES) |
988 | # define BOOST_NO_VARIADIC_TEMPLATES |
989 | #endif |
990 | // Use BOOST_NO_CXX11_VARIADIC_MACROS instead of BOOST_NO_VARIADIC_MACROS |
991 | #if defined(BOOST_NO_CXX11_VARIADIC_MACROS) && !defined(BOOST_NO_VARIADIC_MACROS) |
992 | # define BOOST_NO_VARIADIC_MACROS |
993 | #endif |
994 | // Use BOOST_NO_CXX11_NUMERIC_LIMITS instead of BOOST_NO_NUMERIC_LIMITS_LOWEST |
995 | #if defined(BOOST_NO_CXX11_NUMERIC_LIMITS) && !defined(BOOST_NO_NUMERIC_LIMITS_LOWEST) |
996 | # define BOOST_NO_NUMERIC_LIMITS_LOWEST |
997 | #endif |
998 | // ------------------ End of deprecated macros for 1.51 --------------------------- |
999 | |
1000 | |
1001 | // |
1002 | // Helper macro for marking types and methods final |
1003 | // |
1004 | #if !defined(BOOST_NO_CXX11_FINAL) |
1005 | # define BOOST_FINAL final |
1006 | #else |
1007 | # define BOOST_FINAL |
1008 | #endif |
1009 | |
1010 | // |
1011 | // Helper macros BOOST_NOEXCEPT, BOOST_NOEXCEPT_IF, BOOST_NOEXCEPT_EXPR |
1012 | // These aid the transition to C++11 while still supporting C++03 compilers |
1013 | // |
1014 | #ifdef BOOST_NO_CXX11_NOEXCEPT |
1015 | # define BOOST_NOEXCEPT |
1016 | # define BOOST_NOEXCEPT_OR_NOTHROW throw() |
1017 | # define BOOST_NOEXCEPT_IF(Predicate) |
1018 | # define BOOST_NOEXCEPT_EXPR(Expression) false |
1019 | #else |
1020 | # define BOOST_NOEXCEPT noexcept |
1021 | # define BOOST_NOEXCEPT_OR_NOTHROW noexcept |
1022 | # define BOOST_NOEXCEPT_IF(Predicate) noexcept((Predicate)) |
1023 | # define BOOST_NOEXCEPT_EXPR(Expression) noexcept((Expression)) |
1024 | #endif |
1025 | // |
1026 | // Helper macro BOOST_FALLTHROUGH |
1027 | // Fallback definition of BOOST_FALLTHROUGH macro used to mark intended |
1028 | // fall-through between case labels in a switch statement. We use a definition |
1029 | // that requires a semicolon after it to avoid at least one type of misuse even |
1030 | // on unsupported compilers. |
1031 | // |
1032 | #ifndef BOOST_FALLTHROUGH |
1033 | # define BOOST_FALLTHROUGH ((void)0) |
1034 | #endif |
1035 | |
1036 | // |
1037 | // constexpr workarounds |
1038 | // |
1039 | #if defined(BOOST_NO_CXX11_CONSTEXPR) |
1040 | #define BOOST_CONSTEXPR |
1041 | #define BOOST_CONSTEXPR_OR_CONST const |
1042 | #else |
1043 | #define BOOST_CONSTEXPR constexpr |
1044 | #define BOOST_CONSTEXPR_OR_CONST constexpr |
1045 | #endif |
1046 | #if defined(BOOST_NO_CXX14_CONSTEXPR) |
1047 | #define BOOST_CXX14_CONSTEXPR |
1048 | #else |
1049 | #define BOOST_CXX14_CONSTEXPR constexpr |
1050 | #endif |
1051 | #if !defined(BOOST_NO_CXX17_STRUCTURED_BINDINGS) && defined(BOOST_NO_CXX11_HDR_TUPLE) |
1052 | # define BOOST_NO_CXX17_STRUCTURED_BINDINGS |
1053 | #endif |
1054 | |
1055 | // |
1056 | // C++17 inline variables |
1057 | // |
1058 | #if !defined(BOOST_NO_CXX17_INLINE_VARIABLES) |
1059 | #define BOOST_INLINE_VARIABLE inline |
1060 | #else |
1061 | #define BOOST_INLINE_VARIABLE |
1062 | #endif |
1063 | // |
1064 | // C++17 if constexpr |
1065 | // |
1066 | #if !defined(BOOST_NO_CXX17_IF_CONSTEXPR) |
1067 | # define BOOST_IF_CONSTEXPR if constexpr |
1068 | #else |
1069 | # define BOOST_IF_CONSTEXPR if |
1070 | #endif |
1071 | |
1072 | #define BOOST_INLINE_CONSTEXPR BOOST_INLINE_VARIABLE BOOST_CONSTEXPR_OR_CONST |
1073 | |
1074 | // |
1075 | // Unused variable/typedef workarounds: |
1076 | // |
1077 | #ifndef BOOST_ATTRIBUTE_UNUSED |
1078 | # if defined(__has_attribute) && defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x5130) |
1079 | # if __has_attribute(maybe_unused) |
1080 | # define BOOST_ATTRIBUTE_UNUSED [[maybe_unused]] |
1081 | # endif |
1082 | # elif defined(__has_cpp_attribute) |
1083 | # if __has_cpp_attribute(maybe_unused) |
1084 | # define BOOST_ATTRIBUTE_UNUSED [[maybe_unused]] |
1085 | # endif |
1086 | # endif |
1087 | #endif |
1088 | |
1089 | #ifndef BOOST_ATTRIBUTE_UNUSED |
1090 | # define BOOST_ATTRIBUTE_UNUSED |
1091 | #endif |
1092 | |
1093 | // |
1094 | // [[nodiscard]]: |
1095 | // |
1096 | #if defined(__has_attribute) && defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x5130) |
1097 | #if __has_attribute(nodiscard) |
1098 | # define BOOST_ATTRIBUTE_NODISCARD [[nodiscard]] |
1099 | #endif |
1100 | #if __has_attribute(no_unique_address) |
1101 | # define BOOST_ATTRIBUTE_NO_UNIQUE_ADDRESS [[no_unique_address]] |
1102 | #endif |
1103 | #elif defined(__has_cpp_attribute) |
1104 | // clang-6 accepts [[nodiscard]] with -std=c++14, but warns about it -pedantic |
1105 | #if __has_cpp_attribute(nodiscard) && !(defined(__clang__) && (__cplusplus < 201703L)) && !(defined(__GNUC__) && (__cplusplus < 201100)) |
1106 | # define BOOST_ATTRIBUTE_NODISCARD [[nodiscard]] |
1107 | #endif |
1108 | #if __has_cpp_attribute(no_unique_address) && !(defined(__GNUC__) && (__cplusplus < 201100)) |
1109 | # define BOOST_ATTRIBUTE_NO_UNIQUE_ADDRESS [[no_unique_address]] |
1110 | #endif |
1111 | #endif |
1112 | #ifndef BOOST_ATTRIBUTE_NODISCARD |
1113 | # define BOOST_ATTRIBUTE_NODISCARD |
1114 | #endif |
1115 | #ifndef BOOST_ATTRIBUTE_NO_UNIQUE_ADDRESS |
1116 | # define BOOST_ATTRIBUTE_NO_UNIQUE_ADDRESS |
1117 | #endif |
1118 | |
1119 | #define BOOST_STATIC_CONSTEXPR static BOOST_CONSTEXPR_OR_CONST |
1120 | |
1121 | #if !defined(BOOST_NO_CXX11_NULLPTR) |
1122 | # define BOOST_NULLPTR nullptr |
1123 | #else |
1124 | # define BOOST_NULLPTR 0 |
1125 | #endif |
1126 | |
1127 | // |
1128 | // Set BOOST_HAS_STATIC_ASSERT when BOOST_NO_CXX11_STATIC_ASSERT is not defined |
1129 | // |
1130 | #if !defined(BOOST_NO_CXX11_STATIC_ASSERT) && !defined(BOOST_HAS_STATIC_ASSERT) |
1131 | # define BOOST_HAS_STATIC_ASSERT |
1132 | #endif |
1133 | |
1134 | // |
1135 | // Set BOOST_HAS_RVALUE_REFS when BOOST_NO_CXX11_RVALUE_REFERENCES is not defined |
1136 | // |
1137 | #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_HAS_RVALUE_REFS) |
1138 | #define BOOST_HAS_RVALUE_REFS |
1139 | #endif |
1140 | |
1141 | // |
1142 | // Set BOOST_HAS_VARIADIC_TMPL when BOOST_NO_CXX11_VARIADIC_TEMPLATES is not defined |
1143 | // |
1144 | #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_HAS_VARIADIC_TMPL) |
1145 | #define BOOST_HAS_VARIADIC_TMPL |
1146 | #endif |
1147 | // |
1148 | // Set BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS when |
1149 | // BOOST_NO_CXX11_VARIADIC_TEMPLATES is set: |
1150 | // |
1151 | #if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS) |
1152 | # define BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS |
1153 | #endif |
1154 | |
1155 | // This is a catch all case for obsolete compilers / std libs: |
1156 | #if !defined(_YVALS) && !defined(_CPPLIB_VER) // msvc std lib already configured |
1157 | #if (!defined(__has_include) || (__cplusplus < 201700)) |
1158 | # define BOOST_NO_CXX17_HDR_OPTIONAL |
1159 | # define BOOST_NO_CXX17_HDR_STRING_VIEW |
1160 | # define BOOST_NO_CXX17_HDR_VARIANT |
1161 | # define BOOST_NO_CXX17_HDR_ANY |
1162 | # define BOOST_NO_CXX17_HDR_MEMORY_RESOURCE |
1163 | # define BOOST_NO_CXX17_HDR_CHARCONV |
1164 | # define BOOST_NO_CXX17_HDR_EXECUTION |
1165 | # define BOOST_NO_CXX17_HDR_FILESYSTEM |
1166 | #else |
1167 | #if !__has_include(<optional>) |
1168 | # define BOOST_NO_CXX17_HDR_OPTIONAL |
1169 | #endif |
1170 | #if !__has_include(<string_view>) |
1171 | # define BOOST_NO_CXX17_HDR_STRING_VIEW |
1172 | #endif |
1173 | #if !__has_include(<variant>) |
1174 | # define BOOST_NO_CXX17_HDR_VARIANT |
1175 | #endif |
1176 | #if !__has_include(<any>) |
1177 | # define BOOST_NO_CXX17_HDR_ANY |
1178 | #endif |
1179 | #if !__has_include(<memory_resource>) |
1180 | # define BOOST_NO_CXX17_HDR_MEMORY_RESOURCE |
1181 | #endif |
1182 | #if !__has_include(<charconv>) |
1183 | # define BOOST_NO_CXX17_HDR_CHARCONV |
1184 | #endif |
1185 | #if !__has_include(<execution>) |
1186 | # define BOOST_NO_CXX17_HDR_EXECUTION |
1187 | #endif |
1188 | #if !__has_include(<filesystem>) |
1189 | # define BOOST_NO_CXX17_HDR_FILESYSTEM |
1190 | #endif |
1191 | #endif |
1192 | #endif |
1193 | // |
1194 | // Define the std level that the compiler claims to support: |
1195 | // |
1196 | #ifndef BOOST_CXX_VERSION |
1197 | # define BOOST_CXX_VERSION __cplusplus |
1198 | #endif |
1199 | |
1200 | #if (!defined(__has_include) || (BOOST_CXX_VERSION < 201704)) |
1201 | # define BOOST_NO_CXX20_HDR_BARRIER |
1202 | # define BOOST_NO_CXX20_HDR_FORMAT |
1203 | # define BOOST_NO_CXX20_HDR_SOURCE_LOCATION |
1204 | # define BOOST_NO_CXX20_HDR_BIT |
1205 | # define BOOST_NO_CXX20_HDR_LATCH |
1206 | # define BOOST_NO_CXX20_HDR_SPAN |
1207 | # define BOOST_NO_CXX20_HDR_COMPARE |
1208 | # define BOOST_NO_CXX20_HDR_NUMBERS |
1209 | # define BOOST_NO_CXX20_HDR_STOP_TOKEN |
1210 | # define BOOST_NO_CXX20_HDR_CONCEPTS |
1211 | # define BOOST_NO_CXX20_HDR_RANGES |
1212 | # define BOOST_NO_CXX20_HDR_SYNCSTREAM |
1213 | # define BOOST_NO_CXX20_HDR_COROUTINE |
1214 | # define BOOST_NO_CXX20_HDR_SEMAPHORE |
1215 | #else |
1216 | #if (!__has_include(<barrier>) || !defined(__cpp_lib_barrier) || (__cpp_lib_barrier < 201907L)) && !defined(BOOST_NO_CXX20_HDR_BARRIER) |
1217 | # define BOOST_NO_CXX20_HDR_BARRIER |
1218 | #endif |
1219 | #if (!__has_include(<format>) || !defined(__cpp_lib_format) || (__cpp_lib_format < 201907L)) && !defined(BOOST_NO_CXX20_HDR_FORMAT) |
1220 | # define BOOST_NO_CXX20_HDR_FORMAT |
1221 | #endif |
1222 | #if (!__has_include(<source_location>) || !defined(__cpp_lib_source_location) || (__cpp_lib_source_location < 201907L)) && !defined(BOOST_NO_CXX20_HDR_SOURCE_LOCATION) |
1223 | # define BOOST_NO_CXX20_HDR_SOURCE_LOCATION |
1224 | #endif |
1225 | #if (!__has_include(<bit>) || !defined(__cpp_lib_bit_cast) || (__cpp_lib_bit_cast < 201806L) || !defined(__cpp_lib_bitops) || (__cpp_lib_bitops < 201907L) || !defined(__cpp_lib_endian) || (__cpp_lib_endian < 201907L)) && !defined(BOOST_NO_CXX20_HDR_BIT) |
1226 | # define BOOST_NO_CXX20_HDR_BIT |
1227 | #endif |
1228 | #if (!__has_include(<latch>) || !defined(__cpp_lib_latch) || (__cpp_lib_latch < 201907L)) && !defined(BOOST_NO_CXX20_HDR_LATCH) |
1229 | # define BOOST_NO_CXX20_HDR_LATCH |
1230 | #endif |
1231 | #if (!__has_include(<span>) || !defined(__cpp_lib_span) || (__cpp_lib_span < 202002L)) && !defined(BOOST_NO_CXX20_HDR_SPAN) |
1232 | # define BOOST_NO_CXX20_HDR_SPAN |
1233 | #endif |
1234 | #if (!__has_include(<compare>) || !defined(__cpp_lib_three_way_comparison) || (__cpp_lib_three_way_comparison < 201907L)) && !defined(BOOST_NO_CXX20_HDR_COMPARE) |
1235 | # define BOOST_NO_CXX20_HDR_COMPARE |
1236 | #endif |
1237 | #if (!__has_include(<numbers>) || !defined(__cpp_lib_math_constants) || (__cpp_lib_math_constants < 201907L)) && !defined(BOOST_NO_CXX20_HDR_NUMBERS) |
1238 | # define BOOST_NO_CXX20_HDR_NUMBERS |
1239 | #endif |
1240 | #if (!__has_include(<stop_token>) || !defined(__cpp_lib_jthread) || (__cpp_lib_jthread < 201911L)) && !defined(BOOST_NO_CXX20_HDR_STOP_TOKEN) |
1241 | # define BOOST_NO_CXX20_HDR_STOP_TOKEN |
1242 | #endif |
1243 | #if (!__has_include(<concepts>) || !defined(__cpp_lib_concepts) || (__cpp_lib_concepts < 202002L)) && !defined(_YVALS) && !defined(_CPPLIB_VER) && !defined(BOOST_NO_CXX20_HDR_CONCEPTS) |
1244 | # define BOOST_NO_CXX20_HDR_CONCEPTS |
1245 | #endif |
1246 | #if (!__has_include(<ranges>) || !defined(__cpp_lib_ranges) || (__cpp_lib_ranges < 201911L)) && !defined(BOOST_NO_CXX20_HDR_RANGES) |
1247 | # define BOOST_NO_CXX20_HDR_RANGES |
1248 | #endif |
1249 | #if (!__has_include(<syncstream>) || !defined(__cpp_lib_syncbuf) || (__cpp_lib_syncbuf < 201803L)) && !defined(BOOST_NO_CXX20_HDR_SYNCSTREAM) |
1250 | # define BOOST_NO_CXX20_HDR_SYNCSTREAM |
1251 | #endif |
1252 | #if (!__has_include(<coroutine>) || !defined(__cpp_lib_coroutine) || (__cpp_lib_coroutine < 201902L)) && !defined(BOOST_NO_CXX20_HDR_COROUTINE) |
1253 | # define BOOST_NO_CXX20_HDR_COROUTINE |
1254 | #endif |
1255 | #if (!__has_include(<semaphore>) || !defined(__cpp_lib_semaphore) || (__cpp_lib_semaphore < 201907L)) && !defined(BOOST_NO_CXX20_HDR_SEMAPHORE) |
1256 | # define BOOST_NO_CXX20_HDR_SEMAPHORE |
1257 | #endif |
1258 | #endif |
1259 | |
1260 | #if (!defined(__has_include) || (BOOST_CXX_VERSION < 202003L)) |
1261 | # define BOOST_NO_CXX23_HDR_EXPECTED |
1262 | # define BOOST_NO_CXX23_HDR_FLAT_MAP |
1263 | # define BOOST_NO_CXX23_HDR_FLAT_SET |
1264 | # define BOOST_NO_CXX23_HDR_GENERATOR |
1265 | # define BOOST_NO_CXX23_HDR_MDSPAN |
1266 | # define BOOST_NO_CXX23_HDR_PRINT |
1267 | # define BOOST_NO_CXX23_HDR_SPANSTREAM |
1268 | # define BOOST_NO_CXX23_HDR_STACKTRACE |
1269 | # define BOOST_NO_CXX23_HDR_STDFLOAT |
1270 | #else |
1271 | #if (!__has_include(<expected>) || !defined(__cpp_lib_expected) || (__cpp_lib_expected < 202211L)) && !defined(BOOST_NO_CXX23_HDR_EXPECTED) |
1272 | # define BOOST_NO_CXX23_HDR_EXPECTED |
1273 | #endif |
1274 | #if (!__has_include(<flat_map>) || !defined(__cpp_lib_flat_map) || (__cpp_lib_flat_map < 202207L)) && !defined(BOOST_NO_CXX23_HDR_FLAT_MAP) |
1275 | # define BOOST_NO_CXX23_HDR_FLAT_MAP |
1276 | #endif |
1277 | #if (!__has_include(<flat_set>) || !defined(__cpp_lib_flat_set) || (__cpp_lib_flat_set < 202207L)) && !defined(BOOST_NO_CXX23_HDR_FLAT_SET) |
1278 | # define BOOST_NO_CXX23_HDR_FLAT_SET |
1279 | #endif |
1280 | #if (!__has_include(<generator>) || !defined(__cpp_lib_generator) || (__cpp_lib_generator < 202207L)) && !defined(BOOST_NO_CXX23_HDR_GENERATOR) |
1281 | # define BOOST_NO_CXX23_HDR_GENERATOR |
1282 | #endif |
1283 | #if (!__has_include(<mdspan>) || !defined(__cpp_lib_mdspan) || (__cpp_lib_mdspan < 202207L)) && !defined(BOOST_NO_CXX23_HDR_MDSPAN) |
1284 | # define BOOST_NO_CXX23_HDR_MDSPAN |
1285 | #endif |
1286 | #if (!__has_include(<print>) || !defined(__cpp_lib_print) || (__cpp_lib_print < 202207L)) && !defined(BOOST_NO_CXX23_HDR_PRINT) |
1287 | # define BOOST_NO_CXX23_HDR_PRINT |
1288 | #endif |
1289 | #if (!__has_include(<spanstream>) || !defined(__cpp_lib_spanstream) || (__cpp_lib_spanstream < 202106L)) && !defined(BOOST_NO_CXX23_HDR_SPANSTREAM) |
1290 | # define BOOST_NO_CXX23_HDR_SPANSTREAM |
1291 | #endif |
1292 | #if (!__has_include(<stacktrace>) || !defined(__cpp_lib_stacktrace) || (__cpp_lib_stacktrace < 202011L)) && !defined(BOOST_NO_CXX23_HDR_STACKTRACE) |
1293 | # define BOOST_NO_CXX23_HDR_STACKTRACE |
1294 | #endif |
1295 | #if !__has_include(<stdfloat>) && !defined(BOOST_NO_CXX23_HDR_STDFLOAT) |
1296 | # define BOOST_NO_CXX23_HDR_STDFLOAT |
1297 | #endif |
1298 | #endif |
1299 | |
1300 | #if defined(__cplusplus) && defined(__has_include) |
1301 | #if !__has_include(<version>) |
1302 | # define BOOST_NO_CXX20_HDR_VERSION |
1303 | #else |
1304 | // For convenience, this is always included: |
1305 | # include <version> |
1306 | #endif |
1307 | #else |
1308 | # define BOOST_NO_CXX20_HDR_VERSION |
1309 | #endif |
1310 | |
1311 | #if defined(BOOST_MSVC) |
1312 | #if (BOOST_MSVC < 1914) || (_MSVC_LANG < 201703) |
1313 | # define BOOST_NO_CXX17_DEDUCTION_GUIDES |
1314 | #endif |
1315 | #elif !defined(__cpp_deduction_guides) || (__cpp_deduction_guides < 201606) |
1316 | # define BOOST_NO_CXX17_DEDUCTION_GUIDES |
1317 | #endif |
1318 | |
1319 | // |
1320 | // Define composite agregate macros: |
1321 | // |
1322 | #include <boost/config/detail/cxx_composite.hpp> |
1323 | |
1324 | // |
1325 | // Finish off with checks for macros that are depricated / no longer supported, |
1326 | // if any of these are set then it's very likely that much of Boost will no |
1327 | // longer work. So stop with a #error for now, but give the user a chance |
1328 | // to continue at their own risk if they really want to: |
1329 | // |
1330 | #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_CONFIG_ALLOW_DEPRECATED) |
1331 | # error "You are using a compiler which lacks features which are now a minimum requirement in order to use Boost, define BOOST_CONFIG_ALLOW_DEPRECATED if you want to continue at your own risk!!!" |
1332 | #endif |
1333 | |
1334 | #endif |
1335 | |