libstdcpp3.hpp 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482
  1. // (C) Copyright John Maddock 2001.
  2. // (C) Copyright Jens Maurer 2001.
  3. // Use, modification and distribution are subject to the
  4. // Boost Software License, Version 1.0. (See accompanying file
  5. // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. // See http://www.boost.org for most recent version.
  7. // config for libstdc++ v3
  8. // not much to go in here:
  9. #define BOOST_GNU_STDLIB 1
  10. #ifdef __GLIBCXX__
  11. #define BOOST_STDLIB "GNU libstdc++ version " BOOST_STRINGIZE(__GLIBCXX__)
  12. #else
  13. #define BOOST_STDLIB "GNU libstdc++ version " BOOST_STRINGIZE(__GLIBCPP__)
  14. #endif
  15. #if !defined(_GLIBCPP_USE_WCHAR_T) && !defined(_GLIBCXX_USE_WCHAR_T)
  16. # define BOOST_NO_CWCHAR
  17. # define BOOST_NO_CWCTYPE
  18. # define BOOST_NO_STD_WSTRING
  19. # define BOOST_NO_STD_WSTREAMBUF
  20. #endif
  21. #if defined(__osf__) && !defined(_REENTRANT) \
  22. && ( defined(_GLIBCXX_HAVE_GTHR_DEFAULT) || defined(_GLIBCPP_HAVE_GTHR_DEFAULT) )
  23. // GCC 3 on Tru64 forces the definition of _REENTRANT when any std lib header
  24. // file is included, therefore for consistency we define it here as well.
  25. # define _REENTRANT
  26. #endif
  27. #ifdef __GLIBCXX__ // gcc 3.4 and greater:
  28. # if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
  29. || defined(_GLIBCXX__PTHREADS) \
  30. || defined(_GLIBCXX_HAS_GTHREADS) \
  31. || defined(_WIN32) \
  32. || defined(_AIX) \
  33. || defined(__HAIKU__)
  34. //
  35. // If the std lib has thread support turned on, then turn it on in Boost
  36. // as well. We do this because some gcc-3.4 std lib headers define _REENTANT
  37. // while others do not...
  38. //
  39. # define BOOST_HAS_THREADS
  40. # else
  41. # define BOOST_DISABLE_THREADS
  42. # endif
  43. #elif defined(__GLIBCPP__) \
  44. && !defined(_GLIBCPP_HAVE_GTHR_DEFAULT) \
  45. && !defined(_GLIBCPP__PTHREADS)
  46. // disable thread support if the std lib was built single threaded:
  47. # define BOOST_DISABLE_THREADS
  48. #endif
  49. #if (defined(linux) || defined(__linux) || defined(__linux__)) && defined(__arm__) && defined(_GLIBCPP_HAVE_GTHR_DEFAULT)
  50. // linux on arm apparently doesn't define _REENTRANT
  51. // so just turn on threading support whenever the std lib is thread safe:
  52. # define BOOST_HAS_THREADS
  53. #endif
  54. #if !defined(_GLIBCPP_USE_LONG_LONG) \
  55. && !defined(_GLIBCXX_USE_LONG_LONG)\
  56. && defined(BOOST_HAS_LONG_LONG)
  57. // May have been set by compiler/*.hpp, but "long long" without library
  58. // support is useless.
  59. # undef BOOST_HAS_LONG_LONG
  60. #endif
  61. // Apple doesn't seem to reliably defined a *unix* macro
  62. #if !defined(CYGWIN) && ( defined(__unix__) \
  63. || defined(__unix) \
  64. || defined(unix) \
  65. || defined(__APPLE__) \
  66. || defined(__APPLE) \
  67. || defined(APPLE))
  68. # include <unistd.h>
  69. #endif
  70. #ifndef __VXWORKS__ // VxWorks uses Dinkum, not GNU STL with GCC
  71. #if defined(__GLIBCXX__) || (defined(__GLIBCPP__) && __GLIBCPP__>=20020514) // GCC >= 3.1.0
  72. # define BOOST_STD_EXTENSION_NAMESPACE __gnu_cxx
  73. # define BOOST_HAS_SLIST
  74. # define BOOST_HAS_HASH
  75. # define BOOST_SLIST_HEADER <ext/slist>
  76. # if !defined(__GNUC__) || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3)
  77. # define BOOST_HASH_SET_HEADER <ext/hash_set>
  78. # define BOOST_HASH_MAP_HEADER <ext/hash_map>
  79. # else
  80. # define BOOST_HASH_SET_HEADER <backward/hash_set>
  81. # define BOOST_HASH_MAP_HEADER <backward/hash_map>
  82. # endif
  83. #endif
  84. #endif
  85. #if defined(__has_include)
  86. #if defined(BOOST_HAS_HASH)
  87. #if !__has_include(BOOST_HASH_SET_HEADER) || (__GNUC__ >= 10)
  88. #undef BOOST_HAS_HASH
  89. #undef BOOST_HAS_SET_HEADER
  90. #undef BOOST_HAS_MAP_HEADER
  91. #endif
  92. #if !__has_include(BOOST_SLIST_HEADER)
  93. #undef BOOST_HAS_SLIST
  94. #undef BOOST_HAS_SLIST_HEADER
  95. #endif
  96. #endif
  97. #endif
  98. //
  99. // Decide whether we have C++11 support turned on:
  100. //
  101. #if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103)
  102. # define BOOST_LIBSTDCXX11
  103. #endif
  104. //
  105. // Decide which version of libstdc++ we have, normally
  106. // libstdc++ C++0x support is detected via __GNUC__, __GNUC_MINOR__, and possibly
  107. // __GNUC_PATCHLEVEL__ at the suggestion of Jonathan Wakely, one of the libstdc++
  108. // developers. He also commented:
  109. //
  110. // "I'm not sure how useful __GLIBCXX__ is for your purposes, for instance in
  111. // GCC 4.2.4 it is set to 20080519 but in GCC 4.3.0 it is set to 20080305.
  112. // Although 4.3.0 was released earlier than 4.2.4, it has better C++0x support
  113. // than any release in the 4.2 series."
  114. //
  115. // Another resource for understanding libstdc++ features is:
  116. // http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#manual.intro.status.standard.200x
  117. //
  118. // However, using the GCC version number fails when the compiler is clang since this
  119. // only ever claims to emulate GCC-4.2, see https://svn.boost.org/trac/boost/ticket/7473
  120. // for a long discussion on this issue. What we can do though is use clang's __has_include
  121. // to detect the presence of a C++11 header that was introduced with a specific GCC release.
  122. // We still have to be careful though as many such headers were buggy and/or incomplete when
  123. // first introduced, so we only check for headers that were fully featured from day 1, and then
  124. // use that to infer the underlying GCC version:
  125. //
  126. #ifdef __clang__
  127. #ifdef _GLIBCXX_RELEASE
  128. # define BOOST_LIBSTDCXX_VERSION (_GLIBCXX_RELEASE * 10000 + 100)
  129. #else
  130. //
  131. // We figure out which gcc version issued this std lib
  132. // by checking which headers are available:
  133. //
  134. #if __has_include(<expected>)
  135. # define BOOST_LIBSTDCXX_VERSION 120100
  136. #elif __has_include(<source_location>)
  137. # define BOOST_LIBSTDCXX_VERSION 110100
  138. #elif __has_include(<compare>)
  139. # define BOOST_LIBSTDCXX_VERSION 100100
  140. #elif __has_include(<memory_resource>)
  141. # define BOOST_LIBSTDCXX_VERSION 90100
  142. #elif __has_include(<charconv>)
  143. # define BOOST_LIBSTDCXX_VERSION 80100
  144. #elif __has_include(<variant>)
  145. # define BOOST_LIBSTDCXX_VERSION 70100
  146. #elif __has_include(<experimental/memory_resource>)
  147. # define BOOST_LIBSTDCXX_VERSION 60100
  148. #elif __has_include(<experimental/any>)
  149. # define BOOST_LIBSTDCXX_VERSION 50100
  150. #elif __has_include(<shared_mutex>)
  151. # define BOOST_LIBSTDCXX_VERSION 40900
  152. #elif __has_include(<ext/cmath>)
  153. # define BOOST_LIBSTDCXX_VERSION 40800
  154. #elif __has_include(<scoped_allocator>)
  155. # define BOOST_LIBSTDCXX_VERSION 40700
  156. #elif __has_include(<typeindex>)
  157. # define BOOST_LIBSTDCXX_VERSION 40600
  158. #elif __has_include(<future>)
  159. # define BOOST_LIBSTDCXX_VERSION 40500
  160. #elif __has_include(<ratio>)
  161. # define BOOST_LIBSTDCXX_VERSION 40400
  162. #elif __has_include(<array>)
  163. # define BOOST_LIBSTDCXX_VERSION 40300
  164. #endif
  165. #endif
  166. //
  167. // If BOOST_HAS_FLOAT128 is set, now that we know the std lib is libstdc++3, check to see if the std lib is
  168. // configured to support this type. If not disable it:
  169. //
  170. #if defined(BOOST_HAS_FLOAT128) && !defined(_GLIBCXX_USE_FLOAT128)
  171. # undef BOOST_HAS_FLOAT128
  172. #endif
  173. #if (BOOST_LIBSTDCXX_VERSION >= 100000) && defined(BOOST_HAS_HASH)
  174. //
  175. // hash_set/hash_map deprecated and have terminal bugs:
  176. //
  177. #undef BOOST_HAS_HASH
  178. #undef BOOST_HAS_SET_HEADER
  179. #undef BOOST_HAS_MAP_HEADER
  180. #endif
  181. #if (BOOST_LIBSTDCXX_VERSION >= 100000) && defined(BOOST_HAS_HASH)
  182. //
  183. // hash_set/hash_map deprecated and have terminal bugs:
  184. //
  185. #undef BOOST_HAS_HASH
  186. #undef BOOST_HAS_SET_HEADER
  187. #undef BOOST_HAS_MAP_HEADER
  188. #endif
  189. #if (BOOST_LIBSTDCXX_VERSION < 50100)
  190. // libstdc++ does not define this function as it's deprecated in C++11, but clang still looks for it,
  191. // defining it here is a terrible cludge, but should get things working:
  192. extern "C" char *gets (char *__s);
  193. #endif
  194. //
  195. // clang is unable to parse some GCC headers, add those workarounds here:
  196. //
  197. #if BOOST_LIBSTDCXX_VERSION < 50000
  198. # define BOOST_NO_CXX11_HDR_REGEX
  199. #endif
  200. //
  201. // GCC 4.7.x has no __cxa_thread_atexit which
  202. // thread_local objects require for cleanup:
  203. //
  204. #if BOOST_LIBSTDCXX_VERSION < 40800
  205. # define BOOST_NO_CXX11_THREAD_LOCAL
  206. #endif
  207. //
  208. // Early clang versions can handle <chrono>, not exactly sure which versions
  209. // but certainly up to clang-3.8 and gcc-4.6:
  210. //
  211. #if (__clang_major__ < 5)
  212. # if BOOST_LIBSTDCXX_VERSION < 40800
  213. # define BOOST_NO_CXX11_HDR_FUTURE
  214. # define BOOST_NO_CXX11_HDR_MUTEX
  215. # define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
  216. # define BOOST_NO_CXX11_HDR_CHRONO
  217. # endif
  218. #endif
  219. //
  220. // GCC 4.8 and 9 add working versions of <atomic> and <regex> respectively.
  221. // However, we have no test for these as the headers were present but broken
  222. // in early GCC versions.
  223. //
  224. #endif
  225. #if defined(__SUNPRO_CC) && (__SUNPRO_CC >= 0x5130) && (__cplusplus >= 201103L)
  226. //
  227. // Oracle Solaris compiler uses it's own verison of libstdc++ but doesn't
  228. // set __GNUC__
  229. //
  230. #if __SUNPRO_CC >= 0x5140
  231. #define BOOST_LIBSTDCXX_VERSION 50100
  232. #else
  233. #define BOOST_LIBSTDCXX_VERSION 40800
  234. #endif
  235. #endif
  236. #if !defined(BOOST_LIBSTDCXX_VERSION)
  237. # define BOOST_LIBSTDCXX_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
  238. #endif
  239. // std::auto_ptr isn't provided with _GLIBCXX_DEPRECATED=0 (GCC 4.5 and earlier)
  240. // or _GLIBCXX_USE_DEPRECATED=0 (GCC 4.6 and later).
  241. #if defined(BOOST_LIBSTDCXX11)
  242. # if BOOST_LIBSTDCXX_VERSION < 40600
  243. # if !_GLIBCXX_DEPRECATED
  244. # define BOOST_NO_AUTO_PTR
  245. # endif
  246. # elif !defined(_GLIBCXX_USE_DEPRECATED) || !_GLIBCXX_USE_DEPRECATED
  247. # define BOOST_NO_AUTO_PTR
  248. # define BOOST_NO_CXX98_BINDERS
  249. # endif
  250. #endif
  251. // C++0x headers in GCC 4.3.0 and later
  252. //
  253. #if (BOOST_LIBSTDCXX_VERSION < 40300) || !defined(BOOST_LIBSTDCXX11)
  254. # define BOOST_NO_CXX11_HDR_ARRAY
  255. # define BOOST_NO_CXX11_HDR_TUPLE
  256. # define BOOST_NO_CXX11_HDR_UNORDERED_MAP
  257. # define BOOST_NO_CXX11_HDR_UNORDERED_SET
  258. # define BOOST_NO_CXX11_HDR_FUNCTIONAL
  259. #endif
  260. // C++0x headers in GCC 4.4.0 and later
  261. //
  262. #if (BOOST_LIBSTDCXX_VERSION < 40400) || !defined(BOOST_LIBSTDCXX11)
  263. # define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
  264. # define BOOST_NO_CXX11_HDR_FORWARD_LIST
  265. # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
  266. # define BOOST_NO_CXX11_HDR_MUTEX
  267. # define BOOST_NO_CXX11_HDR_RATIO
  268. # define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
  269. # define BOOST_NO_CXX11_SMART_PTR
  270. # define BOOST_NO_CXX11_HDR_EXCEPTION
  271. #else
  272. # define BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG
  273. # define BOOST_HAS_TR1_COMPLEX_OVERLOADS
  274. #endif
  275. // C++0x features in GCC 4.5.0 and later
  276. //
  277. #if (BOOST_LIBSTDCXX_VERSION < 40500) || !defined(BOOST_LIBSTDCXX11)
  278. # define BOOST_NO_CXX11_NUMERIC_LIMITS
  279. # define BOOST_NO_CXX11_HDR_FUTURE
  280. # define BOOST_NO_CXX11_HDR_RANDOM
  281. #endif
  282. // C++0x features in GCC 4.6.0 and later
  283. //
  284. #if (BOOST_LIBSTDCXX_VERSION < 40600) || !defined(BOOST_LIBSTDCXX11)
  285. # define BOOST_NO_CXX11_HDR_TYPEINDEX
  286. # define BOOST_NO_CXX11_ADDRESSOF
  287. # define BOOST_NO_CXX17_ITERATOR_TRAITS
  288. #endif
  289. // C++0x features in GCC 4.7.0 and later
  290. //
  291. #if (BOOST_LIBSTDCXX_VERSION < 40700) || !defined(BOOST_LIBSTDCXX11)
  292. // Note that although <chrono> existed prior to 4.7, "steady_clock" is spelled "monotonic_clock"
  293. // so 4.7.0 is the first truly conforming one.
  294. # define BOOST_NO_CXX11_HDR_CHRONO
  295. # define BOOST_NO_CXX11_ALLOCATOR
  296. # define BOOST_NO_CXX11_POINTER_TRAITS
  297. #endif
  298. // C++0x features in GCC 4.8.0 and later
  299. //
  300. #if (BOOST_LIBSTDCXX_VERSION < 40800) || !defined(BOOST_LIBSTDCXX11)
  301. // Note that although <atomic> existed prior to gcc 4.8 it was largely unimplemented for many types:
  302. # define BOOST_NO_CXX11_HDR_ATOMIC
  303. # define BOOST_NO_CXX11_HDR_THREAD
  304. #endif
  305. // C++0x features in GCC 4.9.0 and later
  306. //
  307. #if (BOOST_LIBSTDCXX_VERSION < 40900) || !defined(BOOST_LIBSTDCXX11)
  308. // Although <regex> is present and compilable against, the actual implementation is not functional
  309. // even for the simplest patterns such as "\d" or "[0-9]". This is the case at least in gcc up to 4.8, inclusively.
  310. # define BOOST_NO_CXX11_HDR_REGEX
  311. #endif
  312. #if (BOOST_LIBSTDCXX_VERSION < 40900) || (__cplusplus <= 201103)
  313. # define BOOST_NO_CXX14_STD_EXCHANGE
  314. #endif
  315. //
  316. // C++0x features in GCC 5.1 and later
  317. //
  318. #if (BOOST_LIBSTDCXX_VERSION < 50100) || !defined(BOOST_LIBSTDCXX11)
  319. # define BOOST_NO_CXX11_HDR_TYPE_TRAITS
  320. # define BOOST_NO_CXX11_HDR_CODECVT
  321. # define BOOST_NO_CXX11_ATOMIC_SMART_PTR
  322. # define BOOST_NO_CXX11_STD_ALIGN
  323. #endif
  324. //
  325. // C++17 features in GCC 7.1 and later
  326. //
  327. #if (BOOST_LIBSTDCXX_VERSION < 70100) || (__cplusplus <= 201402L)
  328. # define BOOST_NO_CXX17_STD_INVOKE
  329. # define BOOST_NO_CXX17_STD_APPLY
  330. # define BOOST_NO_CXX17_HDR_OPTIONAL
  331. # define BOOST_NO_CXX17_HDR_STRING_VIEW
  332. # define BOOST_NO_CXX17_HDR_VARIANT
  333. #endif
  334. #if defined(__has_include)
  335. #if !__has_include(<shared_mutex>)
  336. # define BOOST_NO_CXX14_HDR_SHARED_MUTEX
  337. #elif __cplusplus <= 201103
  338. # define BOOST_NO_CXX14_HDR_SHARED_MUTEX
  339. #endif
  340. //
  341. // <execution> has a dependency to Intel's thread building blocks:
  342. // unless these are installed seperately, including <execution> leads
  343. // to inscrutable errors inside libstdc++'s own headers.
  344. //
  345. #if (BOOST_LIBSTDCXX_VERSION < 100100)
  346. #if !__has_include(<tbb/tbb.h>)
  347. #define BOOST_NO_CXX17_HDR_EXECUTION
  348. #endif
  349. #endif
  350. #elif __cplusplus < 201402 || (BOOST_LIBSTDCXX_VERSION < 40900) || !defined(BOOST_LIBSTDCXX11)
  351. # define BOOST_NO_CXX14_HDR_SHARED_MUTEX
  352. #endif
  353. #if BOOST_LIBSTDCXX_VERSION < 100100
  354. //
  355. // The header may be present but is incomplete:
  356. //
  357. # define BOOST_NO_CXX17_HDR_CHARCONV
  358. #endif
  359. #if BOOST_LIBSTDCXX_VERSION < 110000
  360. //
  361. // Header <bit> may be present but lacks std::bit_cast:
  362. //
  363. #define BOOST_NO_CXX20_HDR_BIT
  364. #endif
  365. #if BOOST_LIBSTDCXX_VERSION >= 120000
  366. //
  367. // Unary function is now deprecated in C++11 and later:
  368. //
  369. #if __cplusplus >= 201103L
  370. #define BOOST_NO_CXX98_FUNCTION_BASE
  371. #endif
  372. #endif
  373. #ifndef __cpp_impl_coroutine
  374. # define BOOST_NO_CXX20_HDR_COROUTINE
  375. #endif
  376. //
  377. // These next defines are mostly for older clang versions with a newer libstdc++ :
  378. //
  379. #if !defined(__cpp_lib_concepts)
  380. #if !defined(BOOST_NO_CXX20_HDR_COMPARE)
  381. # define BOOST_NO_CXX20_HDR_COMPARE
  382. #endif
  383. #if !defined(BOOST_NO_CXX20_HDR_CONCEPTS)
  384. # define BOOST_NO_CXX20_HDR_CONCEPTS
  385. #endif
  386. #if !defined(BOOST_NO_CXX20_HDR_SPAN)
  387. # define BOOST_NO_CXX20_HDR_SPAN
  388. #endif
  389. #if !defined(BOOST_NO_CXX20_HDR_RANGES)
  390. # define BOOST_NO_CXX20_HDR_RANGES
  391. #endif
  392. #endif
  393. #if defined(__clang__)
  394. #if (__clang_major__ < 11) && !defined(BOOST_NO_CXX20_HDR_RANGES)
  395. # define BOOST_NO_CXX20_HDR_RANGES
  396. #endif
  397. #if (__clang_major__ < 10) && (BOOST_LIBSTDCXX_VERSION >= 110000) && !defined(BOOST_NO_CXX11_HDR_CHRONO)
  398. // Old clang can't parse <chrono>:
  399. # define BOOST_NO_CXX11_HDR_CHRONO
  400. # define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
  401. #endif
  402. #endif
  403. #if defined(__clang__) && (BOOST_LIBSTDCXX_VERSION < 40300) && !defined(BOOST_NO_CXX11_NULLPTR)
  404. # define BOOST_NO_CXX11_NULLPTR
  405. #endif
  406. #if defined(__clang__) && (BOOST_LIBSTDCXX_VERSION < 40300) && defined(BOOST_HAS_INT128) && defined(__APPLE_CC__)
  407. #undef BOOST_HAS_INT128
  408. #endif
  409. //
  410. // Headers not present on Solaris with the Oracle compiler:
  411. #if defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x5140)
  412. #define BOOST_NO_CXX11_HDR_FUTURE
  413. #define BOOST_NO_CXX11_HDR_FORWARD_LIST
  414. #define BOOST_NO_CXX11_HDR_ATOMIC
  415. // shared_ptr is present, but is not convertible to bool
  416. // which causes all kinds of problems especially in Boost.Thread
  417. // but probably elsewhere as well.
  418. #define BOOST_NO_CXX11_SMART_PTR
  419. #endif
  420. #if (!defined(_GLIBCXX_HAS_GTHREADS) || !defined(_GLIBCXX_USE_C99_STDINT_TR1))
  421. // Headers not always available:
  422. # ifndef BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
  423. # define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
  424. # endif
  425. # ifndef BOOST_NO_CXX11_HDR_MUTEX
  426. # define BOOST_NO_CXX11_HDR_MUTEX
  427. # endif
  428. # ifndef BOOST_NO_CXX11_HDR_THREAD
  429. # define BOOST_NO_CXX11_HDR_THREAD
  430. # endif
  431. # ifndef BOOST_NO_CXX14_HDR_SHARED_MUTEX
  432. # define BOOST_NO_CXX14_HDR_SHARED_MUTEX
  433. # endif
  434. #endif
  435. #if (!defined(_GTHREAD_USE_MUTEX_TIMEDLOCK) || (_GTHREAD_USE_MUTEX_TIMEDLOCK == 0)) && !defined(BOOST_NO_CXX11_HDR_MUTEX) && (__GNUC__ < 6)
  436. // Timed mutexes are not always available:
  437. # define BOOST_NO_CXX11_HDR_MUTEX
  438. #endif
  439. // --- end ---