Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-30 09:34:49

0001 //  Boost config.hpp configuration header file  ------------------------------//
0002 //  boostinspect:ndprecated_macros -- tell the inspect tool to ignore this file
0003 
0004 //  Copyright (c) 2001-2003 John Maddock
0005 //  Copyright (c) 2001 Darin Adler
0006 //  Copyright (c) 2001 Peter Dimov
0007 //  Copyright (c) 2002 Bill Kempf
0008 //  Copyright (c) 2002 Jens Maurer
0009 //  Copyright (c) 2002-2003 David Abrahams
0010 //  Copyright (c) 2003 Gennaro Prota
0011 //  Copyright (c) 2003 Eric Friedman
0012 //  Copyright (c) 2010 Eric Jourdanneau, Joel Falcou
0013 // Distributed under the Boost Software License, Version 1.0. (See
0014 // accompanying file LICENSE_1_0.txt or copy at
0015 // http://www.boost.org/LICENSE_1_0.txt)
0016 
0017 //  See http://www.boost.org/ for most recent version.
0018 
0019 //  Boost config.hpp policy and rationale documentation has been moved to
0020 //  http://www.boost.org/libs/config/
0021 //
0022 //  This file is intended to be stable, and relatively unchanging.
0023 //  It should contain boilerplate code only - no compiler specific
0024 //  code unless it is unavoidable - no changes unless unavoidable.
0025 
0026 #ifndef BOOST_CONFIG_SUFFIX_HPP
0027 #define BOOST_CONFIG_SUFFIX_HPP
0028 
0029 #if defined(__GNUC__) && (__GNUC__ >= 4)
0030 //
0031 // Some GCC-4.x versions issue warnings even when __extension__ is used,
0032 // so use this as a workaround:
0033 //
0034 #pragma GCC system_header
0035 #endif
0036 
0037 //
0038 // ensure that visibility macros are always defined, thus simplifying use
0039 //
0040 #ifndef BOOST_SYMBOL_EXPORT
0041 # define BOOST_SYMBOL_EXPORT
0042 #endif
0043 #ifndef BOOST_SYMBOL_IMPORT
0044 # define BOOST_SYMBOL_IMPORT
0045 #endif
0046 #ifndef BOOST_SYMBOL_VISIBLE
0047 # define BOOST_SYMBOL_VISIBLE
0048 #endif
0049 
0050 //
0051 // disable explicitly enforced visibility
0052 //
0053 #if defined(BOOST_DISABLE_EXPLICIT_SYMBOL_VISIBILITY)
0054 
0055 #undef BOOST_SYMBOL_EXPORT
0056 #define BOOST_SYMBOL_EXPORT
0057 
0058 #undef BOOST_SYMBOL_IMPORT
0059 #define BOOST_SYMBOL_IMPORT
0060 
0061 #undef BOOST_SYMBOL_VISIBLE
0062 #define BOOST_SYMBOL_VISIBLE
0063 
0064 #endif
0065 
0066 //
0067 // look for long long by looking for the appropriate macros in <limits.h>.
0068 // Note that we use limits.h rather than climits for maximal portability,
0069 // remember that since these just declare a bunch of macros, there should be
0070 // no namespace issues from this.
0071 //
0072 #if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG)                                              \
0073    && !defined(BOOST_MSVC) && !defined(BOOST_BORLANDC)
0074 # include <limits.h>
0075 # if (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX))
0076 #   define BOOST_HAS_LONG_LONG
0077 # else
0078 #   define BOOST_NO_LONG_LONG
0079 # endif
0080 #endif
0081 
0082 // GCC 3.x will clean up all of those nasty macro definitions that
0083 // BOOST_NO_CTYPE_FUNCTIONS is intended to help work around, so undefine
0084 // it under GCC 3.x.
0085 #if defined(__GNUC__) && (__GNUC__ >= 3) && defined(BOOST_NO_CTYPE_FUNCTIONS)
0086 #  undef BOOST_NO_CTYPE_FUNCTIONS
0087 #endif
0088 
0089 //
0090 // Assume any extensions are in namespace std:: unless stated otherwise:
0091 //
0092 #  ifndef BOOST_STD_EXTENSION_NAMESPACE
0093 #    define BOOST_STD_EXTENSION_NAMESPACE std
0094 #  endif
0095 
0096 //
0097 // If cv-qualified specializations are not allowed, then neither are cv-void ones:
0098 //
0099 #  if defined(BOOST_NO_CV_SPECIALIZATIONS) \
0100       && !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS)
0101 #     define BOOST_NO_CV_VOID_SPECIALIZATIONS
0102 #  endif
0103 
0104 //
0105 // If there is no numeric_limits template, then it can't have any compile time
0106 // constants either!
0107 //
0108 #  if defined(BOOST_NO_LIMITS) \
0109       && !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS)
0110 #     define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
0111 #     define BOOST_NO_MS_INT64_NUMERIC_LIMITS
0112 #     define BOOST_NO_LONG_LONG_NUMERIC_LIMITS
0113 #  endif
0114 
0115 //
0116 // if there is no long long then there is no specialisation
0117 // for numeric_limits<long long> either:
0118 //
0119 #if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS)
0120 #  define BOOST_NO_LONG_LONG_NUMERIC_LIMITS
0121 #endif
0122 
0123 //
0124 // if there is no __int64 then there is no specialisation
0125 // for numeric_limits<__int64> either:
0126 //
0127 #if !defined(BOOST_HAS_MS_INT64) && !defined(BOOST_NO_MS_INT64_NUMERIC_LIMITS)
0128 #  define BOOST_NO_MS_INT64_NUMERIC_LIMITS
0129 #endif
0130 
0131 //
0132 // if member templates are supported then so is the
0133 // VC6 subset of member templates:
0134 //
0135 #  if !defined(BOOST_NO_MEMBER_TEMPLATES) \
0136        && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
0137 #     define BOOST_MSVC6_MEMBER_TEMPLATES
0138 #  endif
0139 
0140 //
0141 // Without partial specialization, can't test for partial specialisation bugs:
0142 //
0143 #  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
0144       && !defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG)
0145 #     define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG
0146 #  endif
0147 
0148 //
0149 // Without partial specialization, we can't have array-type partial specialisations:
0150 //
0151 #  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
0152       && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
0153 #     define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS
0154 #  endif
0155 
0156 //
0157 // Without partial specialization, std::iterator_traits can't work:
0158 //
0159 #  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
0160       && !defined(BOOST_NO_STD_ITERATOR_TRAITS)
0161 #     define BOOST_NO_STD_ITERATOR_TRAITS
0162 #  endif
0163 
0164 //
0165 // Without partial specialization, partial
0166 // specialization with default args won't work either:
0167 //
0168 #  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
0169       && !defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
0170 #     define BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS
0171 #  endif
0172 
0173 //
0174 // Without member template support, we can't have template constructors
0175 // in the standard library either:
0176 //
0177 #  if defined(BOOST_NO_MEMBER_TEMPLATES) \
0178       && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \
0179       && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)
0180 #     define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
0181 #  endif
0182 
0183 //
0184 // Without member template support, we can't have a conforming
0185 // std::allocator template either:
0186 //
0187 #  if defined(BOOST_NO_MEMBER_TEMPLATES) \
0188       && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \
0189       && !defined(BOOST_NO_STD_ALLOCATOR)
0190 #     define BOOST_NO_STD_ALLOCATOR
0191 #  endif
0192 
0193 //
0194 // without ADL support then using declarations will break ADL as well:
0195 //
0196 #if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)
0197 #  define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
0198 #endif
0199 
0200 //
0201 // Without typeid support we have no dynamic RTTI either:
0202 //
0203 #if defined(BOOST_NO_TYPEID) && !defined(BOOST_NO_RTTI)
0204 #  define BOOST_NO_RTTI
0205 #endif
0206 
0207 //
0208 // If we have a standard allocator, then we have a partial one as well:
0209 //
0210 #if !defined(BOOST_NO_STD_ALLOCATOR)
0211 #  define BOOST_HAS_PARTIAL_STD_ALLOCATOR
0212 #endif
0213 
0214 //
0215 // We can't have a working std::use_facet if there is no std::locale:
0216 //
0217 #  if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_USE_FACET)
0218 #     define BOOST_NO_STD_USE_FACET
0219 #  endif
0220 
0221 //
0222 // We can't have a std::messages facet if there is no std::locale:
0223 //
0224 #  if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_MESSAGES)
0225 #     define BOOST_NO_STD_MESSAGES
0226 #  endif
0227 
0228 //
0229 // We can't have a working std::wstreambuf if there is no std::locale:
0230 //
0231 #  if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_WSTREAMBUF)
0232 #     define BOOST_NO_STD_WSTREAMBUF
0233 #  endif
0234 
0235 //
0236 // We can't have a <cwctype> if there is no <cwchar>:
0237 //
0238 #  if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_CWCTYPE)
0239 #     define BOOST_NO_CWCTYPE
0240 #  endif
0241 
0242 //
0243 // We can't have a swprintf if there is no <cwchar>:
0244 //
0245 #  if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_SWPRINTF)
0246 #     define BOOST_NO_SWPRINTF
0247 #  endif
0248 
0249 //
0250 // If Win32 support is turned off, then we must turn off
0251 // threading support also, unless there is some other
0252 // thread API enabled:
0253 //
0254 #if defined(BOOST_DISABLE_WIN32) && defined(_WIN32) \
0255    && !defined(BOOST_DISABLE_THREADS) && !defined(BOOST_HAS_PTHREADS)
0256 #  define BOOST_DISABLE_THREADS
0257 #endif
0258 
0259 //
0260 // Turn on threading support if the compiler thinks that it's in
0261 // multithreaded mode.  We put this here because there are only a
0262 // limited number of macros that identify this (if there's any missing
0263 // from here then add to the appropriate compiler section):
0264 //
0265 #if (defined(__MT__) || defined(_MT) || defined(_REENTRANT) \
0266     || defined(_PTHREADS) || defined(__APPLE__) || defined(__DragonFly__)) \
0267     && !defined(BOOST_HAS_THREADS)
0268 #  define BOOST_HAS_THREADS
0269 #endif
0270 
0271 //
0272 // Turn threading support off if BOOST_DISABLE_THREADS is defined:
0273 //
0274 #if defined(BOOST_DISABLE_THREADS) && defined(BOOST_HAS_THREADS)
0275 #  undef BOOST_HAS_THREADS
0276 #endif
0277 
0278 //
0279 // Turn threading support off if we don't recognise the threading API:
0280 //
0281 #if defined(BOOST_HAS_THREADS) && !defined(BOOST_HAS_PTHREADS)\
0282       && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_BETHREADS)\
0283       && !defined(BOOST_HAS_MPTASKS)
0284 #  undef BOOST_HAS_THREADS
0285 #endif
0286 
0287 //
0288 // Turn threading detail macros off if we don't (want to) use threading
0289 //
0290 #ifndef BOOST_HAS_THREADS
0291 #  undef BOOST_HAS_PTHREADS
0292 #  undef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
0293 #  undef BOOST_HAS_PTHREAD_YIELD
0294 #  undef BOOST_HAS_PTHREAD_DELAY_NP
0295 #  undef BOOST_HAS_WINTHREADS
0296 #  undef BOOST_HAS_BETHREADS
0297 #  undef BOOST_HAS_MPTASKS
0298 #endif
0299 
0300 //
0301 // If the compiler claims to be C99 conformant, then it had better
0302 // have a <stdint.h>:
0303 //
0304 #  if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)
0305 #     define BOOST_HAS_STDINT_H
0306 #     ifndef BOOST_HAS_LOG1P
0307 #        define BOOST_HAS_LOG1P
0308 #     endif
0309 #     ifndef BOOST_HAS_EXPM1
0310 #        define BOOST_HAS_EXPM1
0311 #     endif
0312 #  endif
0313 
0314 //
0315 // Define BOOST_NO_SLIST and BOOST_NO_HASH if required.
0316 // Note that this is for backwards compatibility only.
0317 //
0318 #  if !defined(BOOST_HAS_SLIST) && !defined(BOOST_NO_SLIST)
0319 #     define BOOST_NO_SLIST
0320 #  endif
0321 
0322 #  if !defined(BOOST_HAS_HASH) && !defined(BOOST_NO_HASH)
0323 #     define BOOST_NO_HASH
0324 #  endif
0325 
0326 //
0327 // Set BOOST_SLIST_HEADER if not set already:
0328 //
0329 #if defined(BOOST_HAS_SLIST) && !defined(BOOST_SLIST_HEADER)
0330 #  define BOOST_SLIST_HEADER <slist>
0331 #endif
0332 
0333 //
0334 // Set BOOST_HASH_SET_HEADER if not set already:
0335 //
0336 #if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_SET_HEADER)
0337 #  define BOOST_HASH_SET_HEADER <hash_set>
0338 #endif
0339 
0340 //
0341 // Set BOOST_HASH_MAP_HEADER if not set already:
0342 //
0343 #if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_MAP_HEADER)
0344 #  define BOOST_HASH_MAP_HEADER <hash_map>
0345 #endif
0346 
0347 //  BOOST_HAS_ABI_HEADERS
0348 //  This macro gets set if we have headers that fix the ABI,
0349 //  and prevent ODR violations when linking to external libraries:
0350 #if defined(BOOST_ABI_PREFIX) && defined(BOOST_ABI_SUFFIX) && !defined(BOOST_HAS_ABI_HEADERS)
0351 #  define BOOST_HAS_ABI_HEADERS
0352 #endif
0353 
0354 #if defined(BOOST_HAS_ABI_HEADERS) && defined(BOOST_DISABLE_ABI_HEADERS)
0355 #  undef BOOST_HAS_ABI_HEADERS
0356 #endif
0357 
0358 //  BOOST_NO_STDC_NAMESPACE workaround  --------------------------------------//
0359 //  Because std::size_t usage is so common, even in boost headers which do not
0360 //  otherwise use the C library, the <cstddef> workaround is included here so
0361 //  that ugly workaround code need not appear in many other boost headers.
0362 //  NOTE WELL: This is a workaround for non-conforming compilers; <cstddef>
0363 //  must still be #included in the usual places so that <cstddef> inclusion
0364 //  works as expected with standard conforming compilers.  The resulting
0365 //  double inclusion of <cstddef> is harmless.
0366 
0367 # if defined(BOOST_NO_STDC_NAMESPACE) && defined(__cplusplus)
0368 #   include <cstddef>
0369     namespace std { using ::ptrdiff_t; using ::size_t; }
0370 # endif
0371 
0372 //  Workaround for the unfortunate min/max macros defined by some platform headers
0373 
0374 #define BOOST_PREVENT_MACRO_SUBSTITUTION
0375 
0376 #ifndef BOOST_USING_STD_MIN
0377 #  define BOOST_USING_STD_MIN() using std::min
0378 #endif
0379 
0380 #ifndef BOOST_USING_STD_MAX
0381 #  define BOOST_USING_STD_MAX() using std::max
0382 #endif
0383 
0384 //  BOOST_NO_STD_MIN_MAX workaround  -----------------------------------------//
0385 
0386 #  if defined(BOOST_NO_STD_MIN_MAX) && defined(__cplusplus)
0387 
0388 namespace std {
0389   template <class _Tp>
0390   inline const _Tp& min BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) {
0391     return __b < __a ? __b : __a;
0392   }
0393   template <class _Tp>
0394   inline const _Tp& max BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) {
0395     return  __a < __b ? __b : __a;
0396   }
0397 }
0398 
0399 #  endif
0400 
0401 // BOOST_STATIC_CONSTANT workaround --------------------------------------- //
0402 // On compilers which don't allow in-class initialization of static integral
0403 // constant members, we must use enums as a workaround if we want the constants
0404 // to be available at compile-time. This macro gives us a convenient way to
0405 // declare such constants.
0406 
0407 #  ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
0408 #       define BOOST_STATIC_CONSTANT(type, assignment) enum { assignment }
0409 #  else
0410 #     define BOOST_STATIC_CONSTANT(type, assignment) static const type assignment
0411 #  endif
0412 
0413 // BOOST_USE_FACET / HAS_FACET workaround ----------------------------------//
0414 // When the standard library does not have a conforming std::use_facet there
0415 // are various workarounds available, but they differ from library to library.
0416 // The same problem occurs with has_facet.
0417 // These macros provide a consistent way to access a locale's facets.
0418 // Usage:
0419 //    replace
0420 //       std::use_facet<Type>(loc);
0421 //    with
0422 //       BOOST_USE_FACET(Type, loc);
0423 //    Note do not add a std:: prefix to the front of BOOST_USE_FACET!
0424 //  Use for BOOST_HAS_FACET is analogous.
0425 
0426 #if defined(BOOST_NO_STD_USE_FACET)
0427 #  ifdef BOOST_HAS_TWO_ARG_USE_FACET
0428 #     define BOOST_USE_FACET(Type, loc) std::use_facet(loc, static_cast<Type*>(0))
0429 #     define BOOST_HAS_FACET(Type, loc) std::has_facet(loc, static_cast<Type*>(0))
0430 #  elif defined(BOOST_HAS_MACRO_USE_FACET)
0431 #     define BOOST_USE_FACET(Type, loc) std::_USE(loc, Type)
0432 #     define BOOST_HAS_FACET(Type, loc) std::_HAS(loc, Type)
0433 #  elif defined(BOOST_HAS_STLP_USE_FACET)
0434 #     define BOOST_USE_FACET(Type, loc) (*std::_Use_facet<Type >(loc))
0435 #     define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc)
0436 #  endif
0437 #else
0438 #  define BOOST_USE_FACET(Type, loc) std::use_facet< Type >(loc)
0439 #  define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc)
0440 #endif
0441 
0442 // BOOST_NESTED_TEMPLATE workaround ------------------------------------------//
0443 // Member templates are supported by some compilers even though they can't use
0444 // the A::template member<U> syntax, as a workaround replace:
0445 //
0446 // typedef typename A::template rebind<U> binder;
0447 //
0448 // with:
0449 //
0450 // typedef typename A::BOOST_NESTED_TEMPLATE rebind<U> binder;
0451 
0452 #ifndef BOOST_NO_MEMBER_TEMPLATE_KEYWORD
0453 #  define BOOST_NESTED_TEMPLATE template
0454 #else
0455 #  define BOOST_NESTED_TEMPLATE
0456 #endif
0457 
0458 // BOOST_UNREACHABLE_RETURN(x) workaround -------------------------------------//
0459 // Normally evaluates to nothing, unless BOOST_NO_UNREACHABLE_RETURN_DETECTION
0460 // is defined, in which case it evaluates to return x; Use when you have a return
0461 // statement that can never be reached.
0462 
0463 #ifndef BOOST_UNREACHABLE_RETURN
0464 #  ifdef BOOST_NO_UNREACHABLE_RETURN_DETECTION
0465 #     define BOOST_UNREACHABLE_RETURN(x) return x;
0466 #  else
0467 #     define BOOST_UNREACHABLE_RETURN(x)
0468 #  endif
0469 #endif
0470 
0471 // BOOST_DEDUCED_TYPENAME workaround ------------------------------------------//
0472 //
0473 // Some compilers don't support the use of `typename' for dependent
0474 // types in deduced contexts, e.g.
0475 //
0476 //     template <class T> void f(T, typename T::type);
0477 //                                  ^^^^^^^^
0478 // Replace these declarations with:
0479 //
0480 //     template <class T> void f(T, BOOST_DEDUCED_TYPENAME T::type);
0481 
0482 #ifndef BOOST_NO_DEDUCED_TYPENAME
0483 #  define BOOST_DEDUCED_TYPENAME typename
0484 #else
0485 #  define BOOST_DEDUCED_TYPENAME
0486 #endif
0487 
0488 #ifndef BOOST_NO_TYPENAME_WITH_CTOR
0489 #  define BOOST_CTOR_TYPENAME typename
0490 #else
0491 #  define BOOST_CTOR_TYPENAME
0492 #endif
0493 
0494 //
0495 // If we're on a CUDA device (note DEVICE not HOST, irrespective of compiler) then disable __int128 and __float128 support if present:
0496 //
0497 #if defined(__CUDA_ARCH__) && defined(BOOST_HAS_FLOAT128)
0498 #  undef BOOST_HAS_FLOAT128
0499 #endif
0500 #if defined(__CUDA_ARCH__) && defined(BOOST_HAS_INT128)
0501 #  undef BOOST_HAS_INT128
0502 #endif
0503 
0504 // long long workaround ------------------------------------------//
0505 // On gcc (and maybe other compilers?) long long is alway supported
0506 // but it's use may generate either warnings (with -ansi), or errors
0507 // (with -pedantic -ansi) unless it's use is prefixed by __extension__
0508 //
0509 #if defined(BOOST_HAS_LONG_LONG) && defined(__cplusplus)
0510 namespace boost{
0511 #  ifdef __GNUC__
0512    __extension__ typedef long long long_long_type;
0513    __extension__ typedef unsigned long long ulong_long_type;
0514 #  else
0515    typedef long long long_long_type;
0516    typedef unsigned long long ulong_long_type;
0517 #  endif
0518 }
0519 #endif
0520 // same again for __int128:
0521 #if defined(BOOST_HAS_INT128) && defined(__cplusplus)
0522 namespace boost{
0523 #  ifdef __GNUC__
0524    __extension__ typedef __int128 int128_type;
0525    __extension__ typedef unsigned __int128 uint128_type;
0526 #  else
0527    typedef __int128 int128_type;
0528    typedef unsigned __int128 uint128_type;
0529 #  endif
0530 }
0531 #endif
0532 // same again for __float128:
0533 #if defined(BOOST_HAS_FLOAT128) && defined(__cplusplus)
0534 namespace boost {
0535 #  ifdef __GNUC__
0536    __extension__ typedef __float128 float128_type;
0537 #  else
0538    typedef __float128 float128_type;
0539 #  endif
0540 }
0541 #endif
0542 
0543 // BOOST_[APPEND_]EXPLICIT_TEMPLATE_[NON_]TYPE macros --------------------------//
0544 
0545 // These macros are obsolete. Port away and remove.
0546 
0547 #  define BOOST_EXPLICIT_TEMPLATE_TYPE(t)
0548 #  define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
0549 #  define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
0550 #  define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
0551 
0552 #  define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t)
0553 #  define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
0554 #  define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
0555 #  define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
0556 
0557 // When BOOST_NO_STD_TYPEINFO is defined, we can just import
0558 // the global definition into std namespace, 
0559 // see https://svn.boost.org/trac10/ticket/4115
0560 #if defined(BOOST_NO_STD_TYPEINFO) && defined(__cplusplus) && defined(BOOST_MSVC)
0561 #include <typeinfo>
0562 namespace std{ using ::type_info; }
0563 // Since we do now have typeinfo, undef the macro:
0564 #undef BOOST_NO_STD_TYPEINFO
0565 #endif
0566 
0567 // ---------------------------------------------------------------------------//
0568 
0569 // Helper macro BOOST_STRINGIZE:
0570 // Helper macro BOOST_JOIN:
0571 
0572 #include <boost/config/helper_macros.hpp>
0573 
0574 //
0575 // Set some default values for compiler/library/platform names.
0576 // These are for debugging config setup only:
0577 //
0578 #  ifndef BOOST_COMPILER
0579 #     define BOOST_COMPILER "Unknown ISO C++ Compiler"
0580 #  endif
0581 #  ifndef BOOST_STDLIB
0582 #     define BOOST_STDLIB "Unknown ISO standard library"
0583 #  endif
0584 #  ifndef BOOST_PLATFORM
0585 #     if defined(unix) || defined(__unix) || defined(_XOPEN_SOURCE) \
0586          || defined(_POSIX_SOURCE)
0587 #        define BOOST_PLATFORM "Generic Unix"
0588 #     else
0589 #        define BOOST_PLATFORM "Unknown"
0590 #     endif
0591 #  endif
0592 
0593 //
0594 // Set some default values GPU support
0595 //
0596 #  ifndef BOOST_GPU_ENABLED
0597 #  define BOOST_GPU_ENABLED
0598 #  endif
0599 
0600 // BOOST_RESTRICT ---------------------------------------------//
0601 // Macro to use in place of 'restrict' keyword variants
0602 #if !defined(BOOST_RESTRICT)
0603 #  if defined(_MSC_VER)
0604 #    define BOOST_RESTRICT __restrict
0605 #    if !defined(BOOST_NO_RESTRICT_REFERENCES) && (_MSC_FULL_VER < 190023026)
0606 #      define BOOST_NO_RESTRICT_REFERENCES
0607 #    endif
0608 #  elif defined(__GNUC__) && __GNUC__ > 3
0609      // Clang also defines __GNUC__ (as 4)
0610 #    define BOOST_RESTRICT __restrict__
0611 #  else
0612 #    define BOOST_RESTRICT
0613 #    if !defined(BOOST_NO_RESTRICT_REFERENCES)
0614 #      define BOOST_NO_RESTRICT_REFERENCES
0615 #    endif
0616 #  endif
0617 #endif
0618 
0619 // BOOST_MAY_ALIAS -----------------------------------------------//
0620 // The macro expands to an attribute to mark a type that is allowed to alias other types.
0621 // The macro is defined in the compiler-specific headers.
0622 #if !defined(BOOST_MAY_ALIAS)
0623 #  define BOOST_NO_MAY_ALIAS
0624 #  define BOOST_MAY_ALIAS
0625 #endif
0626 
0627 // BOOST_FORCEINLINE ---------------------------------------------//
0628 // Macro to use in place of 'inline' to force a function to be inline
0629 #if !defined(BOOST_FORCEINLINE)
0630 #  if defined(_MSC_VER)
0631 #    define BOOST_FORCEINLINE __forceinline
0632 #  elif defined(__GNUC__) && __GNUC__ > 3
0633      // Clang also defines __GNUC__ (as 4)
0634 #    define BOOST_FORCEINLINE inline __attribute__ ((__always_inline__))
0635 #  else
0636 #    define BOOST_FORCEINLINE inline
0637 #  endif
0638 #endif
0639 
0640 // BOOST_NOINLINE ---------------------------------------------//
0641 // Macro to use in place of 'inline' to prevent a function to be inlined
0642 #if !defined(BOOST_NOINLINE)
0643 #  if defined(_MSC_VER)
0644 #    define BOOST_NOINLINE __declspec(noinline)
0645 #  elif defined(__GNUC__) && __GNUC__ > 3
0646      // Clang also defines __GNUC__ (as 4)
0647 #    if defined(__CUDACC__)
0648        // nvcc doesn't always parse __noinline__,
0649        // see: https://svn.boost.org/trac/boost/ticket/9392
0650 #      define BOOST_NOINLINE __attribute__ ((noinline))
0651 #    elif defined(__HIP__)
0652        // See https://github.com/boostorg/config/issues/392
0653 #      define BOOST_NOINLINE __attribute__ ((noinline))
0654 #    else
0655 #      define BOOST_NOINLINE __attribute__ ((__noinline__))
0656 #    endif
0657 #  else
0658 #    define BOOST_NOINLINE
0659 #  endif
0660 #endif
0661 
0662 // BOOST_NORETURN ---------------------------------------------//
0663 // Macro to use before a function declaration/definition to designate
0664 // the function as not returning normally (i.e. with a return statement
0665 // or by leaving the function scope, if the function return type is void).
0666 #if !defined(BOOST_NORETURN)
0667 #  if defined(_MSC_VER)
0668 #    define BOOST_NORETURN __declspec(noreturn)
0669 #  elif defined(__GNUC__) || defined(__CODEGEARC__) && defined(__clang__)
0670 #    define BOOST_NORETURN __attribute__ ((__noreturn__))
0671 #  elif defined(__has_attribute) && defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x5130)
0672 #    if __has_attribute(noreturn)
0673 #      define BOOST_NORETURN [[noreturn]]
0674 #    endif
0675 #  elif defined(__has_cpp_attribute) 
0676 #    if __has_cpp_attribute(noreturn)
0677 #      define BOOST_NORETURN [[noreturn]]
0678 #    endif
0679 #  endif
0680 #endif
0681 
0682 #if !defined(BOOST_NORETURN)
0683 #  define BOOST_NO_NORETURN
0684 #  define BOOST_NORETURN
0685 #endif
0686 
0687 // BOOST_DEPRECATED -------------------------------------------//
0688 // The macro can be used to mark deprecated symbols, such as functions, objects and types.
0689 // Any code that uses these symbols will produce warnings, possibly with a message specified
0690 // as an argument. The warnings can be suppressed by defining BOOST_ALLOW_DEPRECATED_SYMBOLS
0691 // or BOOST_ALLOW_DEPRECATED.
0692 #if !defined(BOOST_DEPRECATED) && __cplusplus >= 201402
0693 #define BOOST_DEPRECATED(msg) [[deprecated(msg)]]
0694 #endif
0695 
0696 #if defined(BOOST_ALLOW_DEPRECATED_SYMBOLS) || defined(BOOST_ALLOW_DEPRECATED)
0697 #undef BOOST_DEPRECATED
0698 #endif
0699 
0700 #if !defined(BOOST_DEPRECATED)
0701 #define BOOST_DEPRECATED(msg)
0702 #endif
0703 
0704 // Branch prediction hints
0705 // These macros are intended to wrap conditional expressions that yield true or false
0706 //
0707 //  if (BOOST_LIKELY(var == 10))
0708 //  {
0709 //     // the most probable code here
0710 //  }
0711 //
0712 #if !defined(BOOST_LIKELY)
0713 #  define BOOST_LIKELY(x) x
0714 #endif
0715 #if !defined(BOOST_UNLIKELY)
0716 #  define BOOST_UNLIKELY(x) x
0717 #endif
0718 
0719 #if !defined(BOOST_NO_CXX11_OVERRIDE)
0720 #  define BOOST_OVERRIDE override
0721 #else
0722 #  define BOOST_OVERRIDE
0723 #endif
0724 
0725 // Type and data alignment specification
0726 //
0727 #if !defined(BOOST_ALIGNMENT)
0728 #  if !defined(BOOST_NO_CXX11_ALIGNAS)
0729 #    define BOOST_ALIGNMENT(x) alignas(x)
0730 #  elif defined(_MSC_VER)
0731 #    define BOOST_ALIGNMENT(x) __declspec(align(x))
0732 #  elif defined(__GNUC__)
0733 #    define BOOST_ALIGNMENT(x) __attribute__ ((__aligned__(x)))
0734 #  else
0735 #    define BOOST_NO_ALIGNMENT
0736 #    define BOOST_ALIGNMENT(x)
0737 #  endif
0738 #endif
0739 
0740 // Lack of non-public defaulted functions is implied by the lack of any defaulted functions
0741 #if !defined(BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS) && defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS)
0742 #  define BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS
0743 #endif
0744 
0745 // Lack of defaulted moves is implied by the lack of either rvalue references or any defaulted functions
0746 #if !defined(BOOST_NO_CXX11_DEFAULTED_MOVES) && (defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) || defined(BOOST_NO_CXX11_RVALUE_REFERENCES))
0747 #  define BOOST_NO_CXX11_DEFAULTED_MOVES
0748 #endif
0749 
0750 // Defaulted and deleted function declaration helpers
0751 // These macros are intended to be inside a class definition.
0752 // BOOST_DEFAULTED_FUNCTION accepts the function declaration and its
0753 // body, which will be used if the compiler doesn't support defaulted functions.
0754 // BOOST_DELETED_FUNCTION only accepts the function declaration. It
0755 // will expand to a private function declaration, if the compiler doesn't support
0756 // deleted functions. Because of this it is recommended to use BOOST_DELETED_FUNCTION
0757 // in the end of the class definition.
0758 //
0759 //  class my_class
0760 //  {
0761 //  public:
0762 //      // Default-constructible
0763 //      BOOST_DEFAULTED_FUNCTION(my_class(), {})
0764 //      // Copying prohibited
0765 //      BOOST_DELETED_FUNCTION(my_class(my_class const&))
0766 //      BOOST_DELETED_FUNCTION(my_class& operator= (my_class const&))
0767 //  };
0768 //
0769 #if !(defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) || defined(BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS))
0770 #   define BOOST_DEFAULTED_FUNCTION(fun, body) fun = default;
0771 #else
0772 #   define BOOST_DEFAULTED_FUNCTION(fun, body) fun body
0773 #endif
0774 
0775 #if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)
0776 #   define BOOST_DELETED_FUNCTION(fun) fun = delete;
0777 #else
0778 #   define BOOST_DELETED_FUNCTION(fun) private: fun;
0779 #endif
0780 
0781 //
0782 // Set BOOST_NO_DECLTYPE_N3276 when BOOST_NO_DECLTYPE is defined
0783 //
0784 #if defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_CXX11_DECLTYPE_N3276)
0785 #define BOOST_NO_CXX11_DECLTYPE_N3276 BOOST_NO_CXX11_DECLTYPE
0786 #endif
0787 
0788 //  -------------------- Deprecated macros for 1.50 ---------------------------
0789 //  These will go away in a future release
0790 
0791 //  Use BOOST_NO_CXX11_HDR_UNORDERED_SET or BOOST_NO_CXX11_HDR_UNORDERED_MAP
0792 //           instead of BOOST_NO_STD_UNORDERED
0793 #if defined(BOOST_NO_CXX11_HDR_UNORDERED_MAP) || defined (BOOST_NO_CXX11_HDR_UNORDERED_SET)
0794 # ifndef BOOST_NO_CXX11_STD_UNORDERED
0795 #  define BOOST_NO_CXX11_STD_UNORDERED
0796 # endif
0797 #endif
0798 
0799 //  Use BOOST_NO_CXX11_HDR_INITIALIZER_LIST instead of BOOST_NO_INITIALIZER_LISTS
0800 #if defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_INITIALIZER_LISTS)
0801 #  define BOOST_NO_INITIALIZER_LISTS
0802 #endif
0803 
0804 //  Use BOOST_NO_CXX11_HDR_ARRAY instead of BOOST_NO_0X_HDR_ARRAY
0805 #if defined(BOOST_NO_CXX11_HDR_ARRAY) && !defined(BOOST_NO_0X_HDR_ARRAY)
0806 #  define BOOST_NO_0X_HDR_ARRAY
0807 #endif
0808 //  Use BOOST_NO_CXX11_HDR_CHRONO instead of BOOST_NO_0X_HDR_CHRONO
0809 #if defined(BOOST_NO_CXX11_HDR_CHRONO) && !defined(BOOST_NO_0X_HDR_CHRONO)
0810 #  define BOOST_NO_0X_HDR_CHRONO
0811 #endif
0812 //  Use BOOST_NO_CXX11_HDR_CODECVT instead of BOOST_NO_0X_HDR_CODECVT
0813 #if defined(BOOST_NO_CXX11_HDR_CODECVT) && !defined(BOOST_NO_0X_HDR_CODECVT)
0814 #  define BOOST_NO_0X_HDR_CODECVT
0815 #endif
0816 //  Use BOOST_NO_CXX11_HDR_CONDITION_VARIABLE instead of BOOST_NO_0X_HDR_CONDITION_VARIABLE
0817 #if defined(BOOST_NO_CXX11_HDR_CONDITION_VARIABLE) && !defined(BOOST_NO_0X_HDR_CONDITION_VARIABLE)
0818 #  define BOOST_NO_0X_HDR_CONDITION_VARIABLE
0819 #endif
0820 //  Use BOOST_NO_CXX11_HDR_FORWARD_LIST instead of BOOST_NO_0X_HDR_FORWARD_LIST
0821 #if defined(BOOST_NO_CXX11_HDR_FORWARD_LIST) && !defined(BOOST_NO_0X_HDR_FORWARD_LIST)
0822 #  define BOOST_NO_0X_HDR_FORWARD_LIST
0823 #endif
0824 //  Use BOOST_NO_CXX11_HDR_FUTURE instead of BOOST_NO_0X_HDR_FUTURE
0825 #if defined(BOOST_NO_CXX11_HDR_FUTURE) && !defined(BOOST_NO_0X_HDR_FUTURE)
0826 #  define BOOST_NO_0X_HDR_FUTURE
0827 #endif
0828 
0829 //  Use BOOST_NO_CXX11_HDR_INITIALIZER_LIST
0830 //  instead of BOOST_NO_0X_HDR_INITIALIZER_LIST or BOOST_NO_INITIALIZER_LISTS
0831 #ifdef BOOST_NO_CXX11_HDR_INITIALIZER_LIST
0832 # ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
0833 #  define BOOST_NO_0X_HDR_INITIALIZER_LIST
0834 # endif
0835 # ifndef BOOST_NO_INITIALIZER_LISTS
0836 #  define BOOST_NO_INITIALIZER_LISTS
0837 # endif
0838 #endif
0839 
0840 //  Use BOOST_NO_CXX11_HDR_MUTEX instead of BOOST_NO_0X_HDR_MUTEX
0841 #if defined(BOOST_NO_CXX11_HDR_MUTEX) && !defined(BOOST_NO_0X_HDR_MUTEX)
0842 #  define BOOST_NO_0X_HDR_MUTEX
0843 #endif
0844 //  Use BOOST_NO_CXX11_HDR_RANDOM instead of BOOST_NO_0X_HDR_RANDOM
0845 #if defined(BOOST_NO_CXX11_HDR_RANDOM) && !defined(BOOST_NO_0X_HDR_RANDOM)
0846 #  define BOOST_NO_0X_HDR_RANDOM
0847 #endif
0848 //  Use BOOST_NO_CXX11_HDR_RATIO instead of BOOST_NO_0X_HDR_RATIO
0849 #if defined(BOOST_NO_CXX11_HDR_RATIO) && !defined(BOOST_NO_0X_HDR_RATIO)
0850 #  define BOOST_NO_0X_HDR_RATIO
0851 #endif
0852 //  Use BOOST_NO_CXX11_HDR_REGEX instead of BOOST_NO_0X_HDR_REGEX
0853 #if defined(BOOST_NO_CXX11_HDR_REGEX) && !defined(BOOST_NO_0X_HDR_REGEX)
0854 #  define BOOST_NO_0X_HDR_REGEX
0855 #endif
0856 //  Use BOOST_NO_CXX11_HDR_SYSTEM_ERROR instead of BOOST_NO_0X_HDR_SYSTEM_ERROR
0857 #if defined(BOOST_NO_CXX11_HDR_SYSTEM_ERROR) && !defined(BOOST_NO_0X_HDR_SYSTEM_ERROR)
0858 #  define BOOST_NO_0X_HDR_SYSTEM_ERROR
0859 #endif
0860 //  Use BOOST_NO_CXX11_HDR_THREAD instead of BOOST_NO_0X_HDR_THREAD
0861 #if defined(BOOST_NO_CXX11_HDR_THREAD) && !defined(BOOST_NO_0X_HDR_THREAD)
0862 #  define BOOST_NO_0X_HDR_THREAD
0863 #endif
0864 //  Use BOOST_NO_CXX11_HDR_TUPLE instead of BOOST_NO_0X_HDR_TUPLE
0865 #if defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_0X_HDR_TUPLE)
0866 #  define BOOST_NO_0X_HDR_TUPLE
0867 #endif
0868 //  Use BOOST_NO_CXX11_HDR_TYPE_TRAITS instead of BOOST_NO_0X_HDR_TYPE_TRAITS
0869 #if defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS) && !defined(BOOST_NO_0X_HDR_TYPE_TRAITS)
0870 #  define BOOST_NO_0X_HDR_TYPE_TRAITS
0871 #endif
0872 //  Use BOOST_NO_CXX11_HDR_TYPEINDEX instead of BOOST_NO_0X_HDR_TYPEINDEX
0873 #if defined(BOOST_NO_CXX11_HDR_TYPEINDEX) && !defined(BOOST_NO_0X_HDR_TYPEINDEX)
0874 #  define BOOST_NO_0X_HDR_TYPEINDEX
0875 #endif
0876 //  Use BOOST_NO_CXX11_HDR_UNORDERED_MAP instead of BOOST_NO_0X_HDR_UNORDERED_MAP
0877 #if defined(BOOST_NO_CXX11_HDR_UNORDERED_MAP) && !defined(BOOST_NO_0X_HDR_UNORDERED_MAP)
0878 #  define BOOST_NO_0X_HDR_UNORDERED_MAP
0879 #endif
0880 //  Use BOOST_NO_CXX11_HDR_UNORDERED_SET instead of BOOST_NO_0X_HDR_UNORDERED_SET
0881 #if defined(BOOST_NO_CXX11_HDR_UNORDERED_SET) && !defined(BOOST_NO_0X_HDR_UNORDERED_SET)
0882 #  define BOOST_NO_0X_HDR_UNORDERED_SET
0883 #endif
0884 
0885 //  ------------------ End of deprecated macros for 1.50 ---------------------------
0886 
0887 //  -------------------- Deprecated macros for 1.51 ---------------------------
0888 //  These will go away in a future release
0889 
0890 //  Use     BOOST_NO_CXX11_AUTO_DECLARATIONS instead of   BOOST_NO_AUTO_DECLARATIONS
0891 #if defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) && !defined(BOOST_NO_AUTO_DECLARATIONS)
0892 #  define BOOST_NO_AUTO_DECLARATIONS
0893 #endif
0894 //  Use     BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS instead of   BOOST_NO_AUTO_MULTIDECLARATIONS
0895 #if defined(BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS) && !defined(BOOST_NO_AUTO_MULTIDECLARATIONS)
0896 #  define BOOST_NO_AUTO_MULTIDECLARATIONS
0897 #endif
0898 //  Use     BOOST_NO_CXX11_CHAR16_T instead of   BOOST_NO_CHAR16_T
0899 #if defined(BOOST_NO_CXX11_CHAR16_T) && !defined(BOOST_NO_CHAR16_T)
0900 #  define BOOST_NO_CHAR16_T
0901 #endif
0902 //  Use     BOOST_NO_CXX11_CHAR32_T instead of   BOOST_NO_CHAR32_T
0903 #if defined(BOOST_NO_CXX11_CHAR32_T) && !defined(BOOST_NO_CHAR32_T)
0904 #  define BOOST_NO_CHAR32_T
0905 #endif
0906 //  Use     BOOST_NO_CXX11_TEMPLATE_ALIASES instead of   BOOST_NO_TEMPLATE_ALIASES
0907 #if defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) && !defined(BOOST_NO_TEMPLATE_ALIASES)
0908 #  define BOOST_NO_TEMPLATE_ALIASES
0909 #endif
0910 //  Use     BOOST_NO_CXX11_CONSTEXPR instead of   BOOST_NO_CONSTEXPR
0911 #if defined(BOOST_NO_CXX11_CONSTEXPR) && !defined(BOOST_NO_CONSTEXPR)
0912 #  define BOOST_NO_CONSTEXPR
0913 #endif
0914 //  Use     BOOST_NO_CXX11_DECLTYPE_N3276 instead of   BOOST_NO_DECLTYPE_N3276
0915 #if defined(BOOST_NO_CXX11_DECLTYPE_N3276) && !defined(BOOST_NO_DECLTYPE_N3276)
0916 #  define BOOST_NO_DECLTYPE_N3276
0917 #endif
0918 //  Use     BOOST_NO_CXX11_DECLTYPE instead of   BOOST_NO_DECLTYPE
0919 #if defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_DECLTYPE)
0920 #  define BOOST_NO_DECLTYPE
0921 #endif
0922 //  Use     BOOST_NO_CXX11_DEFAULTED_FUNCTIONS instead of   BOOST_NO_DEFAULTED_FUNCTIONS
0923 #if defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) && !defined(BOOST_NO_DEFAULTED_FUNCTIONS)
0924 #  define BOOST_NO_DEFAULTED_FUNCTIONS
0925 #endif
0926 //  Use     BOOST_NO_CXX11_DELETED_FUNCTIONS instead of   BOOST_NO_DELETED_FUNCTIONS
0927 #if defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) && !defined(BOOST_NO_DELETED_FUNCTIONS)
0928 #  define BOOST_NO_DELETED_FUNCTIONS
0929 #endif
0930 //  Use     BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS instead of   BOOST_NO_EXPLICIT_CONVERSION_OPERATORS
0931 #if defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS) && !defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS)
0932 #  define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS
0933 #endif
0934 //  Use     BOOST_NO_CXX11_EXTERN_TEMPLATE instead of   BOOST_NO_EXTERN_TEMPLATE
0935 #if defined(BOOST_NO_CXX11_EXTERN_TEMPLATE) && !defined(BOOST_NO_EXTERN_TEMPLATE)
0936 #  define BOOST_NO_EXTERN_TEMPLATE
0937 #endif
0938 //  Use     BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS instead of   BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS
0939 #if defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS) && !defined(BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS)
0940 #  define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS
0941 #endif
0942 //  Use     BOOST_NO_CXX11_LAMBDAS instead of   BOOST_NO_LAMBDAS
0943 #if defined(BOOST_NO_CXX11_LAMBDAS) && !defined(BOOST_NO_LAMBDAS)
0944 #  define BOOST_NO_LAMBDAS
0945 #endif
0946 //  Use     BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS instead of   BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS
0947 #if defined(BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS) && !defined(BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS)
0948 #  define BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS
0949 #endif
0950 //  Use     BOOST_NO_CXX11_NOEXCEPT instead of   BOOST_NO_NOEXCEPT
0951 #if defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_NOEXCEPT)
0952 #  define BOOST_NO_NOEXCEPT
0953 #endif
0954 //  Use     BOOST_NO_CXX11_NULLPTR instead of   BOOST_NO_NULLPTR
0955 #if defined(BOOST_NO_CXX11_NULLPTR) && !defined(BOOST_NO_NULLPTR)
0956 #  define BOOST_NO_NULLPTR
0957 #endif
0958 //  Use     BOOST_NO_CXX11_RAW_LITERALS instead of   BOOST_NO_RAW_LITERALS
0959 #if defined(BOOST_NO_CXX11_RAW_LITERALS) && !defined(BOOST_NO_RAW_LITERALS)
0960 #  define BOOST_NO_RAW_LITERALS
0961 #endif
0962 //  Use     BOOST_NO_CXX11_RVALUE_REFERENCES instead of   BOOST_NO_RVALUE_REFERENCES
0963 #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_RVALUE_REFERENCES)
0964 #  define BOOST_NO_RVALUE_REFERENCES
0965 #endif
0966 //  Use     BOOST_NO_CXX11_SCOPED_ENUMS instead of   BOOST_NO_SCOPED_ENUMS
0967 #if defined(BOOST_NO_CXX11_SCOPED_ENUMS) && !defined(BOOST_NO_SCOPED_ENUMS)
0968 #  define BOOST_NO_SCOPED_ENUMS
0969 #endif
0970 //  Use     BOOST_NO_CXX11_STATIC_ASSERT instead of   BOOST_NO_STATIC_ASSERT
0971 #if defined(BOOST_NO_CXX11_STATIC_ASSERT) && !defined(BOOST_NO_STATIC_ASSERT)
0972 #  define BOOST_NO_STATIC_ASSERT
0973 #endif
0974 //  Use     BOOST_NO_CXX11_STD_UNORDERED instead of   BOOST_NO_STD_UNORDERED
0975 #if defined(BOOST_NO_CXX11_STD_UNORDERED) && !defined(BOOST_NO_STD_UNORDERED)
0976 #  define BOOST_NO_STD_UNORDERED
0977 #endif
0978 //  Use     BOOST_NO_CXX11_UNICODE_LITERALS instead of   BOOST_NO_UNICODE_LITERALS
0979 #if defined(BOOST_NO_CXX11_UNICODE_LITERALS) && !defined(BOOST_NO_UNICODE_LITERALS)
0980 #  define BOOST_NO_UNICODE_LITERALS
0981 #endif
0982 //  Use     BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX instead of   BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX
0983 #if defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) && !defined(BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX)
0984 #  define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX
0985 #endif
0986 //  Use     BOOST_NO_CXX11_VARIADIC_TEMPLATES instead of   BOOST_NO_VARIADIC_TEMPLATES
0987 #if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_VARIADIC_TEMPLATES)
0988 #  define BOOST_NO_VARIADIC_TEMPLATES
0989 #endif
0990 //  Use     BOOST_NO_CXX11_VARIADIC_MACROS instead of   BOOST_NO_VARIADIC_MACROS
0991 #if defined(BOOST_NO_CXX11_VARIADIC_MACROS) && !defined(BOOST_NO_VARIADIC_MACROS)
0992 #  define BOOST_NO_VARIADIC_MACROS
0993 #endif
0994 //  Use     BOOST_NO_CXX11_NUMERIC_LIMITS instead of   BOOST_NO_NUMERIC_LIMITS_LOWEST
0995 #if defined(BOOST_NO_CXX11_NUMERIC_LIMITS) && !defined(BOOST_NO_NUMERIC_LIMITS_LOWEST)
0996 #  define BOOST_NO_NUMERIC_LIMITS_LOWEST
0997 #endif
0998 //  ------------------ End of deprecated macros for 1.51 ---------------------------
0999 
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