suffix.hpp 47 KB

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