github.com/searKing/golang/go@v1.2.117/os/signal/cgo/include/boost/config/detail/suffix.hpp (about) 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