passenger 6.1.0 → 6.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (440) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +32 -2
  3. data/Rakefile +6 -13
  4. data/bin/passenger-install-apache2-module +15 -19
  5. data/bin/passenger-install-nginx-module +42 -44
  6. data/bin/passenger-status +9 -10
  7. data/build/common_library.rb +4 -4
  8. data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder/builder.rb +1 -1
  9. data/build/test_basics.rb +4 -3
  10. data/dev/copy_boost_headers +54 -40
  11. data/dev/ruby_server.rb +1 -1
  12. data/src/agent/Core/Config.h +1 -1
  13. data/src/agent/Core/Controller/Config.h +1 -1
  14. data/src/agent/Watchdog/Config.h +1 -1
  15. data/src/cxx_supportlib/Constants.h +1 -1
  16. data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +8 -1
  17. data/src/cxx_supportlib/vendor-modified/boost/assert.hpp +6 -0
  18. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic.hpp +94 -110
  19. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_flag.hpp +2 -2
  20. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_ref.hpp +14 -14
  21. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/addressof.hpp +3 -3
  22. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_flag_impl.hpp +52 -24
  23. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_impl.hpp +641 -285
  24. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_ref_impl.hpp +593 -260
  25. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +37 -24
  26. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_fp_cast.hpp +9 -9
  27. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/cas_based_exchange.hpp +3 -3
  28. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/chrono.hpp +93 -0
  29. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/classify.hpp +16 -17
  30. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +25 -34
  31. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_aarch32.hpp +204 -97
  32. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_aarch64.hpp +251 -122
  33. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_alpha.hpp +56 -56
  34. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_arm.hpp +129 -129
  35. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_ppc.hpp +253 -125
  36. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_sparc.hpp +25 -25
  37. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_x86.hpp +193 -126
  38. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_arm.hpp +57 -57
  39. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_x86.hpp +96 -97
  40. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations_emulated.hpp +24 -24
  41. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_cas_based.hpp +10 -10
  42. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_gcc_atomic.hpp +27 -24
  43. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_gcc_sync.hpp +39 -37
  44. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_linux_arm.hpp +17 -17
  45. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extending_cas_based_arithmetic.hpp +5 -5
  46. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_emulated.hpp +12 -12
  47. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_generic.hpp +21 -21
  48. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_emulated.hpp +30 -30
  49. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_aarch32.hpp +170 -98
  50. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_aarch64.hpp +209 -119
  51. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_arm.hpp +95 -95
  52. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_ppc.hpp +148 -76
  53. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_x86.hpp +293 -123
  54. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_generic.hpp +87 -71
  55. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_arm.hpp +5 -5
  56. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_x86.hpp +88 -88
  57. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_operations.hpp +2 -2
  58. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_aarch32.hpp +4 -5
  59. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_aarch64.hpp +4 -4
  60. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_alpha.hpp +4 -4
  61. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_arm.hpp +9 -9
  62. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_ppc.hpp +4 -4
  63. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_sparc.hpp +4 -4
  64. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_x86.hpp +4 -4
  65. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_msvc_arm.hpp +5 -5
  66. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_msvc_x86.hpp +6 -6
  67. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_operations.hpp +2 -2
  68. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_operations_emulated.hpp +2 -2
  69. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_gcc_atomic.hpp +5 -5
  70. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_gcc_sync.hpp +4 -4
  71. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_linux_arm.hpp +7 -7
  72. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_emulated.hpp +7 -7
  73. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_generic.hpp +6 -6
  74. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +110 -49
  75. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_atomic_memory_order_utils.hpp +1 -1
  76. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/has_posix_clock_traits.hpp +51 -0
  77. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/int_sizes.hpp +26 -32
  78. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/integral_conversions.hpp +15 -15
  79. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/interlocked.hpp +69 -30
  80. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/intptr.hpp +8 -8
  81. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/lock_pool.hpp +51 -31
  82. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/memory_order_utils.hpp +2 -2
  83. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/once_flag.hpp +2 -2
  84. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm_common.hpp +6 -6
  85. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc_common.hpp +4 -4
  86. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +5 -5
  87. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/storage_traits.hpp +31 -31
  88. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/alignment_of.hpp +2 -3
  89. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/has_unique_object_representations.hpp +2 -5
  90. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_floating_point.hpp +3 -3
  91. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_iec559.hpp +2 -2
  92. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_integral.hpp +3 -3
  93. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_signed.hpp +3 -3
  94. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_trivially_copyable.hpp +20 -13
  95. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_trivially_default_constructible.hpp +13 -13
  96. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/make_signed.hpp +3 -3
  97. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/make_unsigned.hpp +3 -3
  98. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_darwin_ulock.hpp +90 -16
  99. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_dragonfly_umtx.hpp +80 -11
  100. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_emulated.hpp +160 -15
  101. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_freebsd_umtx.hpp +327 -38
  102. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_futex.hpp +276 -33
  103. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_generic.hpp +260 -20
  104. data/src/cxx_supportlib/vendor-modified/boost/atomic/fences.hpp +4 -3
  105. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic.hpp +14 -18
  106. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_flag.hpp +2 -2
  107. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_ref.hpp +13 -13
  108. data/src/cxx_supportlib/vendor-modified/boost/atomic/posix_clock_traits_fwd.hpp +59 -0
  109. data/src/cxx_supportlib/vendor-modified/boost/atomic/thread_pause.hpp +102 -0
  110. data/src/cxx_supportlib/vendor-modified/boost/atomic/wait_result.hpp +56 -0
  111. data/src/cxx_supportlib/vendor-modified/boost/atomic.hpp +4 -1
  112. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +5 -0
  113. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
  114. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +108 -41
  115. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +1235 -1009
  116. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +3 -2
  117. data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithm.hpp +56 -0
  118. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +1 -0
  119. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_lib.h +9 -9
  120. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +23 -2
  121. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +0 -1
  122. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +88 -23
  123. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +2 -1
  124. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +2 -2
  125. data/src/cxx_supportlib/vendor-modified/boost/container/detail/operator_new_helpers.hpp +68 -0
  126. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +72 -13
  127. data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +13 -0
  128. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +8 -5
  129. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +31 -10
  130. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +37 -10
  131. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +19 -0
  132. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +23 -1
  133. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +72 -5
  134. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +3 -10
  135. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +54 -23
  136. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/devector.hpp +6 -4
  137. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +19 -0
  138. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +32 -5
  139. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +27 -2
  140. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +22 -0
  141. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +37 -17
  142. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +23 -1
  143. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +41 -20
  144. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +5 -8
  145. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_fwd.hpp +3 -1
  146. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_is_avalanching.hpp +57 -0
  147. data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +29 -29
  148. data/src/cxx_supportlib/vendor-modified/boost/core/cmath.hpp +3 -3
  149. data/src/cxx_supportlib/vendor-modified/boost/core/data.hpp +15 -1
  150. data/src/cxx_supportlib/vendor-modified/boost/core/default_allocator.hpp +1 -0
  151. data/src/cxx_supportlib/vendor-modified/boost/core/demangle.hpp +1 -1
  152. data/src/cxx_supportlib/vendor-modified/boost/core/detail/assert.hpp +18 -0
  153. data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_sleep.hpp +2 -2
  154. data/src/cxx_supportlib/vendor-modified/boost/core/detail/static_assert.hpp +42 -0
  155. data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +16 -10
  156. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +35 -27
  157. data/src/cxx_supportlib/vendor-modified/boost/core/scoped_enum.hpp +1 -1
  158. data/src/cxx_supportlib/vendor-modified/boost/core/size.hpp +14 -0
  159. data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +20 -9
  160. data/src/cxx_supportlib/vendor-modified/boost/cregex.hpp +0 -5
  161. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +8 -0
  162. data/src/cxx_supportlib/vendor-modified/boost/describe/modifiers.hpp +1 -1
  163. data/src/cxx_supportlib/vendor-modified/boost/foreach.hpp +1 -0
  164. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +4 -4
  165. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +2 -2
  166. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_rebind.hpp +9 -0
  167. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +1 -0
  168. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +2 -2
  169. data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +43 -64
  170. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_def.hpp +0 -83
  171. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_undef.hpp +1 -5
  172. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/eval_if_default.hpp +44 -0
  173. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/facade_iterator_category.hpp +103 -117
  174. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/conjunction.hpp +53 -0
  175. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/disjunction.hpp +53 -0
  176. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/negation.hpp +53 -0
  177. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/type_identity.hpp +54 -0
  178. data/src/cxx_supportlib/vendor-modified/boost/iterator/distance.hpp +32 -38
  179. data/src/cxx_supportlib/vendor-modified/boost/iterator/enable_if_convertible.hpp +84 -0
  180. data/src/cxx_supportlib/vendor-modified/boost/iterator/interoperable.hpp +22 -34
  181. data/src/cxx_supportlib/vendor-modified/boost/iterator/is_iterator.hpp +16 -16
  182. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_adaptor.hpp +162 -309
  183. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_categories.hpp +52 -161
  184. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_concepts.hpp +3 -11
  185. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_facade.hpp +804 -977
  186. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_traits.hpp +24 -17
  187. data/src/cxx_supportlib/vendor-modified/boost/iterator/min_category.hpp +83 -0
  188. data/src/cxx_supportlib/vendor-modified/boost/iterator/minimum_category.hpp +11 -73
  189. data/src/cxx_supportlib/vendor-modified/boost/iterator/reverse_iterator.hpp +56 -57
  190. data/src/cxx_supportlib/vendor-modified/boost/iterator/transform_iterator.hpp +123 -156
  191. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +1 -1
  192. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/buffer_view.hpp +1 -1
  193. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +36 -33
  194. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +43 -50
  195. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +23 -27
  196. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +1 -1
  197. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +10 -11
  198. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_basic_unlockedbuf.hpp +1 -1
  199. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +1 -1
  200. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +6 -7
  201. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/type_traits.hpp +81 -0
  202. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +4 -4
  203. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +8 -9
  204. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +1 -1
  205. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wide_posix_api.cpp +1 -12
  206. data/src/cxx_supportlib/vendor-modified/boost/memory_order.hpp +8 -26
  207. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_to_raw_pointer.hpp +1 -1
  208. data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +1 -1
  209. data/src/cxx_supportlib/vendor-modified/boost/move/detail/std_ns_begin.hpp +6 -0
  210. data/src/cxx_supportlib/vendor-modified/boost/move/detail/unique_ptr_meta_utils.hpp +2 -2
  211. data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +11 -44
  212. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +34 -0
  213. data/src/cxx_supportlib/vendor-modified/boost/mp11/set.hpp +33 -1
  214. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
  215. data/src/cxx_supportlib/vendor-modified/boost/mpl/and.hpp +4 -8
  216. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/na_assert.hpp +1 -1
  217. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/ptr_to_ref.hpp +1 -1
  218. data/src/cxx_supportlib/vendor-modified/boost/mpl/bitand.hpp +2 -6
  219. data/src/cxx_supportlib/vendor-modified/boost/mpl/bitor.hpp +2 -6
  220. data/src/cxx_supportlib/vendor-modified/boost/mpl/or.hpp +2 -6
  221. data/src/cxx_supportlib/vendor-modified/boost/pool/pool.hpp +1 -1
  222. data/src/cxx_supportlib/vendor-modified/boost/pool/simple_segregated_storage.hpp +0 -13
  223. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_seq_256.hpp +190 -190
  224. data/src/cxx_supportlib/vendor-modified/boost/random/beta_distribution.hpp +12 -2
  225. data/src/cxx_supportlib/vendor-modified/boost/random/detail/config.hpp +4 -0
  226. data/src/cxx_supportlib/vendor-modified/boost/random/detail/size.hpp +41 -0
  227. data/src/cxx_supportlib/vendor-modified/boost/random/detail/xoshiro_base.hpp +472 -0
  228. data/src/cxx_supportlib/vendor-modified/boost/random/discrete_distribution.hpp +7 -10
  229. data/src/cxx_supportlib/vendor-modified/boost/random/gamma_distribution.hpp +1 -1
  230. data/src/cxx_supportlib/vendor-modified/boost/random/generalized_inverse_gaussian_distribution.hpp +339 -0
  231. data/src/cxx_supportlib/vendor-modified/boost/random/hyperexponential_distribution.hpp +12 -14
  232. data/src/cxx_supportlib/vendor-modified/boost/random/inverse_gaussian_distribution.hpp +226 -0
  233. data/src/cxx_supportlib/vendor-modified/boost/random/mersenne_twister.hpp +1 -4
  234. data/src/cxx_supportlib/vendor-modified/boost/random/mixmax.hpp +63 -63
  235. data/src/cxx_supportlib/vendor-modified/boost/random/piecewise_constant_distribution.hpp +7 -10
  236. data/src/cxx_supportlib/vendor-modified/boost/random/piecewise_linear_distribution.hpp +8 -11
  237. data/src/cxx_supportlib/vendor-modified/boost/random/seed_seq.hpp +1 -3
  238. data/src/cxx_supportlib/vendor-modified/boost/random/splitmix64.hpp +1 -4
  239. data/src/cxx_supportlib/vendor-modified/boost/random/xoshiro.hpp +488 -0
  240. data/src/cxx_supportlib/vendor-modified/boost/random.hpp +3 -0
  241. data/src/cxx_supportlib/vendor-modified/boost/range/concepts.hpp +2 -0
  242. data/src/cxx_supportlib/vendor-modified/boost/range/detail/has_member_size.hpp +1 -0
  243. data/src/cxx_supportlib/vendor-modified/boost/range/detail/msvc_has_iterator_workaround.hpp +2 -0
  244. data/src/cxx_supportlib/vendor-modified/boost/range/has_range_iterator.hpp +1 -1
  245. data/src/cxx_supportlib/vendor-modified/boost/range/iterator.hpp +1 -0
  246. data/src/cxx_supportlib/vendor-modified/boost/range/iterator_range_core.hpp +4 -1
  247. data/src/cxx_supportlib/vendor-modified/boost/range/size_type.hpp +1 -1
  248. data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +35 -18
  249. data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +18 -101
  250. data/src/cxx_supportlib/vendor-modified/boost/regex/pattern_except.hpp +0 -4
  251. data/src/cxx_supportlib/vendor-modified/boost/regex/pending/object_cache.hpp +0 -4
  252. data/src/cxx_supportlib/vendor-modified/boost/regex/pending/unicode_iterator.hpp +0 -6
  253. data/src/cxx_supportlib/vendor-modified/boost/regex/regex_traits.hpp +0 -4
  254. data/src/cxx_supportlib/vendor-modified/boost/regex/user.hpp +4 -10
  255. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex.hpp +63 -17
  256. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_creator.hpp +71 -16
  257. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_parser.hpp +22 -1
  258. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/c_regex_traits.hpp +11 -4
  259. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/char_regex_traits.hpp +2 -0
  260. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/cpp_regex_traits.hpp +11 -8
  261. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/cregex.hpp +2 -1
  262. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/error_type.hpp +1 -1
  263. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/icu.hpp +40 -38
  264. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/iterator_category.hpp +2 -0
  265. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/iterator_traits.hpp +4 -0
  266. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/match_flags.hpp +39 -37
  267. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/match_results.hpp +46 -9
  268. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/mem_block_cache.hpp +4 -0
  269. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/object_cache.hpp +2 -0
  270. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/pattern_except.hpp +6 -4
  271. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher.hpp +57 -8
  272. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_common.hpp +21 -6
  273. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_non_recursive.hpp +18 -3
  274. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regbase.hpp +4 -2
  275. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex.hpp +6 -6
  276. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_format.hpp +23 -18
  277. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_fwd.hpp +9 -9
  278. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_grep.hpp +9 -5
  279. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_iterator.hpp +11 -7
  280. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_match.hpp +10 -7
  281. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_merge.hpp +4 -4
  282. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_raw_buffer.hpp +3 -0
  283. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_replace.hpp +6 -2
  284. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_search.hpp +12 -9
  285. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_split.hpp +6 -3
  286. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_token_iterator.hpp +16 -11
  287. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_traits.hpp +1 -1
  288. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_traits_defaults.hpp +2 -0
  289. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_workaround.hpp +2 -0
  290. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/states.hpp +7 -0
  291. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/sub_match.hpp +54 -49
  292. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/syntax_type.hpp +64 -62
  293. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/u32regex_iterator.hpp +16 -0
  294. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/u32regex_token_iterator.hpp +12 -0
  295. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/unicode_iterator.hpp +6 -4
  296. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/w32_regex_traits.hpp +3 -1
  297. data/src/cxx_supportlib/vendor-modified/boost/regex.hpp +0 -4
  298. data/src/cxx_supportlib/vendor-modified/boost/regex_fwd.hpp +0 -4
  299. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count.hpp +1 -43
  300. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/deprecated_macros.hpp +7 -7
  301. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +2 -77
  302. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base.hpp +1 -64
  303. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_nt.hpp +3 -3
  304. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +0 -77
  305. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_cxx20_constexpr.hpp +37 -0
  306. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock.hpp +5 -28
  307. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +41 -40
  308. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +0 -15
  309. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +0 -18
  310. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +1 -1
  311. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +1 -1
  312. data/src/cxx_supportlib/vendor-modified/boost/tuple/detail/tuple_basic.hpp +1 -0
  313. data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_constant.hpp +8 -6
  314. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complete.hpp +31 -10
  315. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +34 -8
  316. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +6 -4
  317. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +9 -1
  318. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +5 -5
  319. data/src/cxx_supportlib/vendor-modified/boost/unordered/{unordered_printers.hpp → detail/unordered_printers.hpp} +34 -36
  320. data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +6 -49
  321. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +6 -1
  322. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +6 -1
  323. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +6 -1
  324. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +6 -1
  325. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  326. data/src/nginx_module/ContentHandler.c +2 -0
  327. data/src/ruby_supportlib/phusion_passenger/config/download_agent_command.rb +3 -5
  328. data/src/ruby_supportlib/phusion_passenger/config/download_nginx_engine_command.rb +3 -5
  329. data/src/ruby_supportlib/phusion_passenger/config/install_agent_command.rb +3 -5
  330. data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +3 -5
  331. data/src/ruby_supportlib/phusion_passenger/config/installation_utils.rb +1 -1
  332. data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +2 -2
  333. data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +5 -3
  334. data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +2 -2
  335. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +6 -13
  336. data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +29 -30
  337. data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +2 -3
  338. data/src/ruby_supportlib/phusion_passenger/standalone/config_utils.rb +2 -0
  339. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +1 -1
  340. data/src/ruby_supportlib/phusion_passenger/utils/json.rb +1 -1
  341. data/src/ruby_supportlib/phusion_passenger/utils/terminal_choice_menu.rb +1 -1
  342. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +1 -1
  343. data/src/ruby_supportlib/phusion_passenger.rb +8 -8
  344. metadata +26 -99
  345. data/src/cxx_supportlib/vendor-modified/boost/align/aligned_alloc.hpp +0 -47
  346. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_posix.hpp +0 -41
  347. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_sunos.hpp +0 -34
  348. data/src/cxx_supportlib/vendor-modified/boost/align/detail/is_alignment.hpp +0 -28
  349. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/pause.hpp +0 -68
  350. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/conditional.hpp +0 -42
  351. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/integral_constant.hpp +0 -46
  352. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_enum.hpp +0 -42
  353. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_function.hpp +0 -42
  354. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_nothrow_default_constructible.hpp +0 -46
  355. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/remove_cv.hpp +0 -42
  356. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_on_address.hpp +0 -64
  357. data/src/cxx_supportlib/vendor-modified/boost/cerrno.hpp +0 -15
  358. data/src/cxx_supportlib/vendor-modified/boost/detail/indirect_traits.hpp +0 -195
  359. data/src/cxx_supportlib/vendor-modified/boost/detail/select_type.hpp +0 -36
  360. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/enable_if.hpp +0 -83
  361. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/internals.hpp +0 -35
  362. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex.cpp +0 -120
  363. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex_debug.cpp +0 -59
  364. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/static_mutex.cpp +0 -189
  365. data/src/cxx_supportlib/vendor-modified/boost/libs/system/src/error_code.cpp +0 -31
  366. data/src/cxx_supportlib/vendor-modified/boost/regex/config/borland.hpp +0 -72
  367. data/src/cxx_supportlib/vendor-modified/boost/regex/config/cwchar.hpp +0 -207
  368. data/src/cxx_supportlib/vendor-modified/boost/regex/pending/static_mutex.hpp +0 -182
  369. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex.hpp +0 -797
  370. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +0 -1598
  371. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +0 -3174
  372. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/c_regex_traits.hpp +0 -511
  373. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/char_regex_traits.hpp +0 -81
  374. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cpp_regex_traits.hpp +0 -1237
  375. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cregex.hpp +0 -213
  376. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/error_type.hpp +0 -59
  377. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/icu.hpp +0 -1516
  378. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/indexed_bit_flag.hpp +0 -54
  379. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/iterator_category.hpp +0 -91
  380. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/iterator_traits.hpp +0 -135
  381. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +0 -161
  382. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_results.hpp +0 -716
  383. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp +0 -183
  384. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/object_cache.hpp +0 -171
  385. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/pattern_except.hpp +0 -128
  386. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +0 -645
  387. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +0 -1030
  388. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +0 -1947
  389. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_recursive.hpp +0 -1131
  390. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/primary_transform.hpp +0 -146
  391. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/protected_call.hpp +0 -83
  392. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regbase.hpp +0 -180
  393. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex.hpp +0 -166
  394. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +0 -1158
  395. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_fwd.hpp +0 -73
  396. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_grep.hpp +0 -155
  397. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_iterator.hpp +0 -195
  398. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_match.hpp +0 -382
  399. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_merge.hpp +0 -93
  400. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_raw_buffer.hpp +0 -241
  401. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_replace.hpp +0 -99
  402. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_search.hpp +0 -217
  403. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_split.hpp +0 -174
  404. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_token_iterator.hpp +0 -327
  405. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits.hpp +0 -189
  406. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +0 -997
  407. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +0 -237
  408. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/states.hpp +0 -321
  409. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/sub_match.hpp +0 -516
  410. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/syntax_type.hpp +0 -105
  411. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_iterator.hpp +0 -185
  412. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_token_iterator.hpp +0 -360
  413. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/unicode_iterator.hpp +0 -871
  414. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +0 -1229
  415. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc.hpp +0 -79
  416. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc_atomic.hpp +0 -63
  417. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp +0 -88
  418. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_pt.hpp +0 -104
  419. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_spin.hpp +0 -69
  420. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_sync.hpp +0 -72
  421. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +0 -163
  422. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_aix.hpp +0 -152
  423. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +0 -185
  424. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp +0 -148
  425. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +0 -170
  426. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +0 -200
  427. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +0 -194
  428. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +0 -179
  429. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +0 -186
  430. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_pt.hpp +0 -147
  431. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +0 -174
  432. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_spin.hpp +0 -141
  433. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_sync.hpp +0 -165
  434. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +0 -163
  435. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +0 -30
  436. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_sync_intrinsics.hpp +0 -69
  437. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +0 -128
  438. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_nt.hpp +0 -96
  439. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_pt.hpp +0 -86
  440. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_sync.hpp +0 -94
@@ -3,7 +3,7 @@
3
3
  * (See accompanying file LICENSE_1_0.txt or copy at
4
4
  * http://www.boost.org/LICENSE_1_0.txt)
5
5
  *
6
- * Copyright (c) 2020 Andrey Semashev
6
+ * Copyright (c) 2020-2025 Andrey Semashev
7
7
  */
8
8
  /*!
9
9
  * \file atomic/detail/atomic_ref_impl.hpp
@@ -15,8 +15,12 @@
15
15
  #define BOOST_ATOMIC_DETAIL_ATOMIC_REF_IMPL_HPP_INCLUDED_
16
16
 
17
17
  #include <cstddef>
18
+ #include <chrono>
19
+ #include <utility>
20
+ #include <type_traits>
18
21
  #include <boost/assert.hpp>
19
22
  #include <boost/memory_order.hpp>
23
+ #include <boost/atomic/wait_result.hpp>
20
24
  #include <boost/atomic/detail/config.hpp>
21
25
  #include <boost/atomic/detail/addressof.hpp>
22
26
  #include <boost/atomic/detail/storage_traits.hpp>
@@ -27,10 +31,7 @@
27
31
  #include <boost/atomic/detail/core_operations_emulated.hpp>
28
32
  #include <boost/atomic/detail/memory_order_utils.hpp>
29
33
  #include <boost/atomic/detail/type_traits/is_signed.hpp>
30
- #include <boost/atomic/detail/type_traits/remove_cv.hpp>
31
34
  #include <boost/atomic/detail/type_traits/alignment_of.hpp>
32
- #include <boost/atomic/detail/type_traits/conditional.hpp>
33
- #include <boost/atomic/detail/type_traits/integral_constant.hpp>
34
35
  #if !defined(BOOST_ATOMIC_NO_FLOATING_POINT)
35
36
  #include <boost/atomic/detail/bitwise_fp_cast.hpp>
36
37
  #include <boost/atomic/detail/fp_operations.hpp>
@@ -54,55 +55,57 @@ namespace detail {
54
55
  template< typename T, bool Signed, bool Interprocess >
55
56
  struct is_atomic_ref_lock_free
56
57
  {
57
- typedef T value_type;
58
- typedef atomics::detail::core_operations< sizeof(value_type), Signed, Interprocess > core_operations;
59
- typedef typename core_operations::storage_type storage_type;
58
+ using value_type = T;
59
+ using core_operations = atomics::detail::core_operations< sizeof(value_type), Signed, Interprocess >;
60
+ using storage_type = typename core_operations::storage_type;
60
61
 
61
- static BOOST_CONSTEXPR_OR_CONST bool value = sizeof(value_type) == sizeof(storage_type) && core_operations::is_always_lock_free;
62
+ static constexpr bool value = sizeof(value_type) == sizeof(storage_type) && core_operations::is_always_lock_free;
62
63
  };
63
64
 
64
65
  template< typename T, bool Signed, bool Interprocess >
65
66
  class base_atomic_ref_common
66
67
  {
67
68
  public:
68
- typedef T value_type;
69
+ using value_type = T;
69
70
 
70
71
  protected:
71
- typedef typename atomics::detail::remove_cv< value_type >::type unqualified_value_type;
72
- typedef typename atomics::detail::conditional<
72
+ using unqualified_value_type = typename std::remove_cv< value_type >::type;
73
+ using core_operations = typename std::conditional<
73
74
  atomics::detail::is_atomic_ref_lock_free< T, Signed, Interprocess >::value,
74
75
  atomics::detail::core_operations< sizeof(value_type), Signed, Interprocess >,
75
76
  atomics::detail::core_operations_emulated< sizeof(value_type), atomics::detail::alignment_of< value_type >::value, Signed, Interprocess >
76
- >::type core_operations;
77
- typedef atomics::detail::wait_operations< core_operations > wait_operations;
78
- typedef typename atomics::detail::conditional< sizeof(value_type) <= sizeof(void*), value_type, value_type const& >::type value_arg_type;
79
- typedef typename core_operations::storage_type storage_type;
77
+ >::type;
78
+ using wait_operations = atomics::detail::wait_operations< core_operations >;
79
+ using value_arg_type = typename std::conditional< sizeof(value_type) <= sizeof(void*), value_type, value_type const& >::type;
80
+ using storage_type = typename core_operations::storage_type;
80
81
  static_assert(sizeof(storage_type) == sizeof(value_type), "Boost.Atomic internal error: atomic_ref storage size doesn't match the value size");
81
82
 
82
83
  public:
83
- static BOOST_CONSTEXPR_OR_CONST std::size_t required_alignment = atomics::detail::alignment_of< value_type >::value <= core_operations::storage_alignment ? core_operations::storage_alignment : atomics::detail::alignment_of< value_type >::value;
84
- static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = core_operations::is_always_lock_free;
85
- static BOOST_CONSTEXPR_OR_CONST bool always_has_native_wait_notify = wait_operations::always_has_native_wait_notify;
84
+ static constexpr std::size_t required_alignment =
85
+ atomics::detail::alignment_of< value_type >::value <= core_operations::storage_alignment ?
86
+ core_operations::storage_alignment : atomics::detail::alignment_of< value_type >::value;
87
+ static constexpr bool is_always_lock_free = core_operations::is_always_lock_free;
88
+ static constexpr bool always_has_native_wait_notify = wait_operations::always_has_native_wait_notify;
86
89
 
87
90
  protected:
88
91
  value_type* m_value;
89
92
 
90
93
  public:
91
- BOOST_FORCEINLINE explicit base_atomic_ref_common(value_type& v) BOOST_NOEXCEPT : m_value(atomics::detail::addressof(v))
94
+ BOOST_FORCEINLINE explicit base_atomic_ref_common(value_type& v) noexcept : m_value(atomics::detail::addressof(v))
92
95
  {
93
96
  BOOST_ATOMIC_DETAIL_CLEAR_PADDING(const_cast< unqualified_value_type* >(m_value));
94
97
  }
95
98
 
96
- BOOST_FORCEINLINE value_type& value() const BOOST_NOEXCEPT { return *m_value; }
99
+ BOOST_FORCEINLINE value_type& value() const noexcept { return *m_value; }
97
100
 
98
101
  protected:
99
- BOOST_FORCEINLINE storage_type& storage() const BOOST_NOEXCEPT
102
+ BOOST_FORCEINLINE storage_type& storage() const noexcept
100
103
  {
101
104
  return *reinterpret_cast< storage_type* >(const_cast< unqualified_value_type* >(m_value));
102
105
  }
103
106
 
104
107
  public:
105
- BOOST_FORCEINLINE bool is_lock_free() const BOOST_NOEXCEPT
108
+ BOOST_FORCEINLINE bool is_lock_free() const noexcept
106
109
  {
107
110
  // C++20 specifies that is_lock_free returns true if operations on *all* objects of the atomic_ref<T> type are lock-free.
108
111
  // This does not allow to return true or false depending on the referenced object runtime alignment. Currently, Boost.Atomic
@@ -110,17 +113,17 @@ public:
110
113
  return is_always_lock_free;
111
114
  }
112
115
 
113
- BOOST_FORCEINLINE bool has_native_wait_notify() const BOOST_NOEXCEPT
116
+ BOOST_FORCEINLINE bool has_native_wait_notify() const noexcept
114
117
  {
115
118
  return wait_operations::has_native_wait_notify(this->storage());
116
119
  }
117
120
 
118
- BOOST_FORCEINLINE void notify_one() const BOOST_NOEXCEPT
121
+ BOOST_FORCEINLINE void notify_one() const noexcept
119
122
  {
120
123
  wait_operations::notify_one(this->storage());
121
124
  }
122
125
 
123
- BOOST_FORCEINLINE void notify_all() const BOOST_NOEXCEPT
126
+ BOOST_FORCEINLINE void notify_all() const noexcept
124
127
  {
125
128
  wait_operations::notify_all(this->storage());
126
129
  }
@@ -128,11 +131,11 @@ public:
128
131
 
129
132
  #if defined(BOOST_NO_CXX17_INLINE_VARIABLES)
130
133
  template< typename T, bool Signed, bool Interprocess >
131
- BOOST_CONSTEXPR_OR_CONST std::size_t base_atomic_ref_common< T, Signed, Interprocess >::required_alignment;
134
+ constexpr std::size_t base_atomic_ref_common< T, Signed, Interprocess >::required_alignment;
132
135
  template< typename T, bool Signed, bool Interprocess >
133
- BOOST_CONSTEXPR_OR_CONST bool base_atomic_ref_common< T, Signed, Interprocess >::is_always_lock_free;
136
+ constexpr bool base_atomic_ref_common< T, Signed, Interprocess >::is_always_lock_free;
134
137
  template< typename T, bool Signed, bool Interprocess >
135
- BOOST_CONSTEXPR_OR_CONST bool base_atomic_ref_common< T, Signed, Interprocess >::always_has_native_wait_notify;
138
+ constexpr bool base_atomic_ref_common< T, Signed, Interprocess >::always_has_native_wait_notify;
136
139
  #endif
137
140
 
138
141
 
@@ -145,31 +148,34 @@ class base_atomic_ref< T, void, Interprocess > :
145
148
  public base_atomic_ref_common< T, false, Interprocess >
146
149
  {
147
150
  private:
148
- typedef base_atomic_ref_common< T, false, Interprocess > base_type;
151
+ using base_type = base_atomic_ref_common< T, false, Interprocess >;
149
152
 
150
153
  public:
151
- typedef typename base_type::value_type value_type;
154
+ using value_type = typename base_type::value_type;
152
155
 
153
156
  protected:
154
- typedef typename base_type::core_operations core_operations;
155
- typedef typename base_type::wait_operations wait_operations;
156
- typedef typename base_type::storage_type storage_type;
157
- typedef typename base_type::value_arg_type value_arg_type;
157
+ using core_operations = typename base_type::core_operations;
158
+ using wait_operations = typename base_type::wait_operations;
159
+ using storage_type = typename base_type::storage_type;
160
+ using value_arg_type = typename base_type::value_arg_type;
158
161
 
159
162
  private:
163
+ using cxchg_use_bitwise_cast =
160
164
  #if !defined(BOOST_ATOMIC_DETAIL_STORAGE_TYPE_MAY_ALIAS) || !defined(BOOST_ATOMIC_NO_CLEAR_PADDING)
161
- typedef atomics::detail::true_type cxchg_use_bitwise_cast;
165
+ std::true_type;
162
166
  #else
163
- typedef atomics::detail::integral_constant< bool, atomics::detail::alignment_of< value_type >::value <= core_operations::storage_alignment > cxchg_use_bitwise_cast;
167
+ std::integral_constant< bool, atomics::detail::alignment_of< value_type >::value <= core_operations::storage_alignment >;
164
168
  #endif
165
169
 
166
170
  public:
167
- BOOST_DEFAULTED_FUNCTION(base_atomic_ref(base_atomic_ref const& that) BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_DECL, BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_IMPL : base_type(static_cast< base_type const& >(that)) {})
168
- BOOST_FORCEINLINE explicit base_atomic_ref(value_type& v) BOOST_NOEXCEPT : base_type(v)
171
+ base_atomic_ref(base_atomic_ref const&) = default;
172
+ BOOST_FORCEINLINE explicit base_atomic_ref(value_type& v) noexcept : base_type(v)
169
173
  {
170
174
  }
171
175
 
172
- BOOST_FORCEINLINE void store(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
176
+ base_atomic_ref& operator=(base_atomic_ref const&) = delete;
177
+
178
+ BOOST_FORCEINLINE void store(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
173
179
  {
174
180
  BOOST_ASSERT(order != memory_order_consume);
175
181
  BOOST_ASSERT(order != memory_order_acquire);
@@ -178,7 +184,7 @@ public:
178
184
  core_operations::store(this->storage(), atomics::detail::bitwise_cast< storage_type >(v), order);
179
185
  }
180
186
 
181
- BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
187
+ BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const noexcept
182
188
  {
183
189
  BOOST_ASSERT(order != memory_order_release);
184
190
  BOOST_ASSERT(order != memory_order_acq_rel);
@@ -186,12 +192,12 @@ public:
186
192
  return atomics::detail::bitwise_cast< value_type >(core_operations::load(this->storage(), order));
187
193
  }
188
194
 
189
- BOOST_FORCEINLINE value_type exchange(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
195
+ BOOST_FORCEINLINE value_type exchange(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
190
196
  {
191
197
  return atomics::detail::bitwise_cast< value_type >(core_operations::exchange(this->storage(), atomics::detail::bitwise_cast< storage_type >(v), order));
192
198
  }
193
199
 
194
- BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const BOOST_NOEXCEPT
200
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const noexcept
195
201
  {
196
202
  BOOST_ASSERT(failure_order != memory_order_release);
197
203
  BOOST_ASSERT(failure_order != memory_order_acq_rel);
@@ -200,12 +206,12 @@ public:
200
206
  return compare_exchange_strong_impl(expected, desired, success_order, failure_order, cxchg_use_bitwise_cast());
201
207
  }
202
208
 
203
- BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
209
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const noexcept
204
210
  {
205
211
  return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order));
206
212
  }
207
213
 
208
- BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const BOOST_NOEXCEPT
214
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const noexcept
209
215
  {
210
216
  BOOST_ASSERT(failure_order != memory_order_release);
211
217
  BOOST_ASSERT(failure_order != memory_order_acq_rel);
@@ -214,12 +220,12 @@ public:
214
220
  return compare_exchange_weak_impl(expected, desired, success_order, failure_order, cxchg_use_bitwise_cast());
215
221
  }
216
222
 
217
- BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
223
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const noexcept
218
224
  {
219
225
  return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order));
220
226
  }
221
227
 
222
- BOOST_FORCEINLINE value_type wait(value_arg_type old_val, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
228
+ BOOST_FORCEINLINE value_type wait(value_arg_type old_val, memory_order order = memory_order_seq_cst) const noexcept
223
229
  {
224
230
  BOOST_ASSERT(order != memory_order_release);
225
231
  BOOST_ASSERT(order != memory_order_acq_rel);
@@ -227,31 +233,65 @@ public:
227
233
  return atomics::detail::bitwise_cast< value_type >(wait_operations::wait(this->storage(), atomics::detail::bitwise_cast< storage_type >(old_val), order));
228
234
  }
229
235
 
230
- BOOST_DELETED_FUNCTION(base_atomic_ref& operator=(base_atomic_ref const&))
236
+ template< typename Clock, typename Duration >
237
+ BOOST_FORCEINLINE wait_result< value_type >
238
+ wait_until(value_arg_type old_val, std::chrono::time_point< Clock, Duration > timeout, memory_order order = memory_order_seq_cst) const
239
+ noexcept(noexcept(wait_operations::wait_until(
240
+ std::declval< storage_type const volatile& >(), std::declval< storage_type >(), timeout, order, std::declval< bool& >())))
241
+ {
242
+ BOOST_ASSERT(order != memory_order_release);
243
+ BOOST_ASSERT(order != memory_order_acq_rel);
244
+
245
+ bool timed_out = false;
246
+ storage_type new_value = wait_operations::wait_until(this->storage(), atomics::detail::bitwise_cast< storage_type >(old_val), timeout, order, timed_out);
247
+ return wait_result< value_type >(atomics::detail::bitwise_cast< value_type >(new_value), timed_out);
248
+ }
249
+
250
+ template< typename Rep, typename Period >
251
+ BOOST_FORCEINLINE wait_result< value_type >
252
+ wait_for(value_arg_type old_val, std::chrono::duration< Rep, Period > timeout, memory_order order = memory_order_seq_cst) const
253
+ noexcept(noexcept(wait_operations::wait_for(
254
+ std::declval< storage_type const volatile& >(), std::declval< storage_type >(), timeout, order, std::declval< bool& >())))
255
+ {
256
+ BOOST_ASSERT(order != memory_order_release);
257
+ BOOST_ASSERT(order != memory_order_acq_rel);
258
+
259
+ bool timed_out = false;
260
+ storage_type new_value = wait_operations::wait_for(this->storage(), atomics::detail::bitwise_cast< storage_type >(old_val), timeout, order, timed_out);
261
+ return wait_result< value_type >(atomics::detail::bitwise_cast< value_type >(new_value), timed_out);
262
+ }
231
263
 
232
264
  private:
233
- BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) const BOOST_NOEXCEPT
265
+ BOOST_FORCEINLINE bool
266
+ compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::false_type) const noexcept
234
267
  {
235
- return core_operations::compare_exchange_strong(this->storage(), reinterpret_cast< storage_type& >(expected), atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
268
+ return core_operations::compare_exchange_strong(
269
+ this->storage(), reinterpret_cast< storage_type& >(expected), atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
236
270
  }
237
271
 
238
- BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) const BOOST_NOEXCEPT
272
+ BOOST_FORCEINLINE bool
273
+ compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::true_type) const noexcept
239
274
  {
240
275
  storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected);
241
- const bool res = core_operations::compare_exchange_strong(this->storage(), old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
276
+ const bool res = core_operations::compare_exchange_strong(
277
+ this->storage(), old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
242
278
  expected = atomics::detail::bitwise_cast< value_type >(old_value);
243
279
  return res;
244
280
  }
245
281
 
246
- BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) const BOOST_NOEXCEPT
282
+ BOOST_FORCEINLINE bool
283
+ compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::false_type) const noexcept
247
284
  {
248
- return core_operations::compare_exchange_weak(this->storage(), reinterpret_cast< storage_type& >(expected), atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
285
+ return core_operations::compare_exchange_weak(
286
+ this->storage(), reinterpret_cast< storage_type& >(expected), atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
249
287
  }
250
288
 
251
- BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) const BOOST_NOEXCEPT
289
+ BOOST_FORCEINLINE bool
290
+ compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::true_type) const noexcept
252
291
  {
253
292
  storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected);
254
- const bool res = core_operations::compare_exchange_weak(this->storage(), old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
293
+ const bool res = core_operations::compare_exchange_weak(
294
+ this->storage(), old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
255
295
  expected = atomics::detail::bitwise_cast< value_type >(old_value);
256
296
  return res;
257
297
  }
@@ -264,31 +304,35 @@ class base_atomic_ref< T, const int, Interprocess > :
264
304
  public base_atomic_ref_common< T, false, Interprocess >
265
305
  {
266
306
  private:
267
- typedef base_atomic_ref_common< T, false, Interprocess > base_type;
307
+ using base_type = base_atomic_ref_common< T, false, Interprocess >;
268
308
 
269
309
  public:
270
- typedef typename base_type::value_type value_type;
310
+ using value_type = typename base_type::value_type;
271
311
 
272
312
  protected:
273
- typedef typename base_type::core_operations core_operations;
274
- typedef typename base_type::wait_operations wait_operations;
275
- typedef typename base_type::storage_type storage_type;
276
- typedef typename base_type::value_arg_type value_arg_type;
313
+ using core_operations = typename base_type::core_operations;
314
+ using wait_operations = typename base_type::wait_operations;
315
+ using extra_operations = atomics::detail::extra_operations< core_operations >;
316
+ using storage_type = typename base_type::storage_type;
317
+ using value_arg_type = typename base_type::value_arg_type;
277
318
 
278
319
  private:
320
+ using cxchg_use_bitwise_cast =
279
321
  #if !defined(BOOST_ATOMIC_DETAIL_STORAGE_TYPE_MAY_ALIAS) || !defined(BOOST_ATOMIC_NO_CLEAR_PADDING)
280
- typedef atomics::detail::true_type cxchg_use_bitwise_cast;
322
+ std::true_type;
281
323
  #else
282
- typedef atomics::detail::integral_constant< bool, atomics::detail::alignment_of< value_type >::value <= core_operations::storage_alignment > cxchg_use_bitwise_cast;
324
+ std::integral_constant< bool, atomics::detail::alignment_of< value_type >::value <= core_operations::storage_alignment >;
283
325
  #endif
284
326
 
285
327
  public:
286
- BOOST_DEFAULTED_FUNCTION(base_atomic_ref(base_atomic_ref const& that) BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_DECL, BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_IMPL : base_type(static_cast< base_type const& >(that)) {})
287
- BOOST_FORCEINLINE explicit base_atomic_ref(value_type& v) BOOST_NOEXCEPT : base_type(v)
328
+ base_atomic_ref(base_atomic_ref const&) = default;
329
+ BOOST_FORCEINLINE explicit base_atomic_ref(value_type& v) noexcept : base_type(v)
288
330
  {
289
331
  }
290
332
 
291
- BOOST_FORCEINLINE void store(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
333
+ base_atomic_ref& operator=(base_atomic_ref const&) = delete;
334
+
335
+ BOOST_FORCEINLINE void store(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
292
336
  {
293
337
  BOOST_ASSERT(order != memory_order_consume);
294
338
  BOOST_ASSERT(order != memory_order_acquire);
@@ -297,7 +341,7 @@ public:
297
341
  core_operations::store(this->storage(), static_cast< storage_type >(v), order);
298
342
  }
299
343
 
300
- BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
344
+ BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const noexcept
301
345
  {
302
346
  BOOST_ASSERT(order != memory_order_release);
303
347
  BOOST_ASSERT(order != memory_order_acq_rel);
@@ -305,12 +349,12 @@ public:
305
349
  return atomics::detail::bitwise_cast< value_type >(core_operations::load(this->storage(), order));
306
350
  }
307
351
 
308
- BOOST_FORCEINLINE value_type exchange(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
352
+ BOOST_FORCEINLINE value_type exchange(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
309
353
  {
310
354
  return atomics::detail::bitwise_cast< value_type >(core_operations::exchange(this->storage(), static_cast< storage_type >(v), order));
311
355
  }
312
356
 
313
- BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const BOOST_NOEXCEPT
357
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const noexcept
314
358
  {
315
359
  BOOST_ASSERT(failure_order != memory_order_release);
316
360
  BOOST_ASSERT(failure_order != memory_order_acq_rel);
@@ -319,12 +363,12 @@ public:
319
363
  return compare_exchange_strong_impl(expected, desired, success_order, failure_order, cxchg_use_bitwise_cast());
320
364
  }
321
365
 
322
- BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
366
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const noexcept
323
367
  {
324
368
  return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order));
325
369
  }
326
370
 
327
- BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const BOOST_NOEXCEPT
371
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const noexcept
328
372
  {
329
373
  BOOST_ASSERT(failure_order != memory_order_release);
330
374
  BOOST_ASSERT(failure_order != memory_order_acq_rel);
@@ -333,12 +377,125 @@ public:
333
377
  return compare_exchange_weak_impl(expected, desired, success_order, failure_order, cxchg_use_bitwise_cast());
334
378
  }
335
379
 
336
- BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
380
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const noexcept
337
381
  {
338
382
  return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order));
339
383
  }
340
384
 
341
- BOOST_FORCEINLINE value_type wait(value_arg_type old_val, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
385
+ BOOST_FORCEINLINE value_type fetch_and(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
386
+ {
387
+ return atomics::detail::bitwise_cast< value_type >(core_operations::fetch_and(this->storage(), static_cast< storage_type >(v), order));
388
+ }
389
+
390
+ BOOST_FORCEINLINE value_type fetch_or(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
391
+ {
392
+ return atomics::detail::bitwise_cast< value_type >(core_operations::fetch_or(this->storage(), static_cast< storage_type >(v), order));
393
+ }
394
+
395
+ BOOST_FORCEINLINE value_type fetch_xor(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
396
+ {
397
+ return atomics::detail::bitwise_cast< value_type >(core_operations::fetch_xor(this->storage(), static_cast< storage_type >(v), order));
398
+ }
399
+
400
+ BOOST_FORCEINLINE value_type fetch_complement(memory_order order = memory_order_seq_cst) const noexcept
401
+ {
402
+ return atomics::detail::bitwise_cast< value_type >(extra_operations::fetch_complement(this->storage(), order));
403
+ }
404
+
405
+ BOOST_FORCEINLINE value_type bitwise_and(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
406
+ {
407
+ return atomics::detail::bitwise_cast< value_type >(extra_operations::bitwise_and(this->storage(), static_cast< storage_type >(v), order));
408
+ }
409
+
410
+ BOOST_FORCEINLINE value_type bitwise_or(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
411
+ {
412
+ return atomics::detail::bitwise_cast< value_type >(extra_operations::bitwise_or(this->storage(), static_cast< storage_type >(v), order));
413
+ }
414
+
415
+ BOOST_FORCEINLINE value_type bitwise_xor(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
416
+ {
417
+ return atomics::detail::bitwise_cast< value_type >(extra_operations::bitwise_xor(this->storage(), static_cast< storage_type >(v), order));
418
+ }
419
+
420
+ BOOST_FORCEINLINE value_type bitwise_complement(memory_order order = memory_order_seq_cst) const noexcept
421
+ {
422
+ return atomics::detail::bitwise_cast< value_type >(extra_operations::bitwise_complement(this->storage(), order));
423
+ }
424
+
425
+ BOOST_FORCEINLINE void opaque_and(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
426
+ {
427
+ extra_operations::opaque_and(this->storage(), static_cast< storage_type >(v), order);
428
+ }
429
+
430
+ BOOST_FORCEINLINE void opaque_or(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
431
+ {
432
+ extra_operations::opaque_or(this->storage(), static_cast< storage_type >(v), order);
433
+ }
434
+
435
+ BOOST_FORCEINLINE void opaque_xor(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
436
+ {
437
+ extra_operations::opaque_xor(this->storage(), static_cast< storage_type >(v), order);
438
+ }
439
+
440
+ BOOST_FORCEINLINE void opaque_complement(memory_order order = memory_order_seq_cst) const noexcept
441
+ {
442
+ extra_operations::opaque_complement(this->storage(), order);
443
+ }
444
+
445
+ BOOST_FORCEINLINE bool and_and_test(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
446
+ {
447
+ return extra_operations::and_and_test(this->storage(), static_cast< storage_type >(v), order);
448
+ }
449
+
450
+ BOOST_FORCEINLINE bool or_and_test(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
451
+ {
452
+ return extra_operations::or_and_test(this->storage(), static_cast< storage_type >(v), order);
453
+ }
454
+
455
+ BOOST_FORCEINLINE bool xor_and_test(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
456
+ {
457
+ return extra_operations::xor_and_test(this->storage(), static_cast< storage_type >(v), order);
458
+ }
459
+
460
+ BOOST_FORCEINLINE bool complement_and_test(memory_order order = memory_order_seq_cst) const noexcept
461
+ {
462
+ return extra_operations::complement_and_test(this->storage(), order);
463
+ }
464
+
465
+ BOOST_FORCEINLINE bool bit_test_and_set(unsigned int bit_number, memory_order order = memory_order_seq_cst) const noexcept
466
+ {
467
+ BOOST_ASSERT(bit_number < sizeof(value_type) * 8u);
468
+ return extra_operations::bit_test_and_set(this->storage(), bit_number, order);
469
+ }
470
+
471
+ BOOST_FORCEINLINE bool bit_test_and_reset(unsigned int bit_number, memory_order order = memory_order_seq_cst) const noexcept
472
+ {
473
+ BOOST_ASSERT(bit_number < sizeof(value_type) * 8u);
474
+ return extra_operations::bit_test_and_reset(this->storage(), bit_number, order);
475
+ }
476
+
477
+ BOOST_FORCEINLINE bool bit_test_and_complement(unsigned int bit_number, memory_order order = memory_order_seq_cst) const noexcept
478
+ {
479
+ BOOST_ASSERT(bit_number < sizeof(value_type) * 8u);
480
+ return extra_operations::bit_test_and_complement(this->storage(), bit_number, order);
481
+ }
482
+
483
+ BOOST_FORCEINLINE value_type operator&=(value_type v) const noexcept
484
+ {
485
+ return bitwise_and(v);
486
+ }
487
+
488
+ BOOST_FORCEINLINE value_type operator|=(value_type v) const noexcept
489
+ {
490
+ return bitwise_or(v);
491
+ }
492
+
493
+ BOOST_FORCEINLINE value_type operator^=(value_type v) const noexcept
494
+ {
495
+ return bitwise_xor(v);
496
+ }
497
+
498
+ BOOST_FORCEINLINE value_type wait(value_arg_type old_val, memory_order order = memory_order_seq_cst) const noexcept
342
499
  {
343
500
  BOOST_ASSERT(order != memory_order_release);
344
501
  BOOST_ASSERT(order != memory_order_acq_rel);
@@ -346,15 +503,44 @@ public:
346
503
  return atomics::detail::bitwise_cast< value_type >(wait_operations::wait(this->storage(), static_cast< storage_type >(old_val), order));
347
504
  }
348
505
 
349
- BOOST_DELETED_FUNCTION(base_atomic_ref& operator=(base_atomic_ref const&))
506
+ template< typename Clock, typename Duration >
507
+ BOOST_FORCEINLINE wait_result< value_type >
508
+ wait_until(value_arg_type old_val, std::chrono::time_point< Clock, Duration > timeout, memory_order order = memory_order_seq_cst) const
509
+ noexcept(noexcept(wait_operations::wait_until(
510
+ std::declval< storage_type const volatile& >(), std::declval< storage_type >(), timeout, order, std::declval< bool& >())))
511
+ {
512
+ BOOST_ASSERT(order != memory_order_release);
513
+ BOOST_ASSERT(order != memory_order_acq_rel);
514
+
515
+ bool timed_out = false;
516
+ storage_type new_value = wait_operations::wait_until(this->storage(), static_cast< storage_type >(old_val), timeout, order, timed_out);
517
+ return wait_result< value_type >(atomics::detail::bitwise_cast< value_type >(new_value), timed_out);
518
+ }
519
+
520
+ template< typename Rep, typename Period >
521
+ BOOST_FORCEINLINE wait_result< value_type >
522
+ wait_for(value_arg_type old_val, std::chrono::duration< Rep, Period > timeout, memory_order order = memory_order_seq_cst) const
523
+ noexcept(noexcept(wait_operations::wait_for(
524
+ std::declval< storage_type const volatile& >(), std::declval< storage_type >(), timeout, order, std::declval< bool& >())))
525
+ {
526
+ BOOST_ASSERT(order != memory_order_release);
527
+ BOOST_ASSERT(order != memory_order_acq_rel);
528
+
529
+ bool timed_out = false;
530
+ storage_type new_value = wait_operations::wait_for(this->storage(), static_cast< storage_type >(old_val), timeout, order, timed_out);
531
+ return wait_result< value_type >(atomics::detail::bitwise_cast< value_type >(new_value), timed_out);
532
+ }
350
533
 
351
534
  private:
352
- BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) const BOOST_NOEXCEPT
535
+ BOOST_FORCEINLINE bool
536
+ compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::false_type) const noexcept
353
537
  {
354
- return core_operations::compare_exchange_strong(this->storage(), reinterpret_cast< storage_type& >(expected), static_cast< storage_type >(desired), success_order, failure_order);
538
+ return core_operations::compare_exchange_strong(
539
+ this->storage(), reinterpret_cast< storage_type& >(expected), static_cast< storage_type >(desired), success_order, failure_order);
355
540
  }
356
541
 
357
- BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) const BOOST_NOEXCEPT
542
+ BOOST_FORCEINLINE bool
543
+ compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::true_type) const noexcept
358
544
  {
359
545
  storage_type old_value = static_cast< storage_type >(expected);
360
546
  const bool res = core_operations::compare_exchange_strong(this->storage(), old_value, static_cast< storage_type >(desired), success_order, failure_order);
@@ -362,12 +548,15 @@ private:
362
548
  return res;
363
549
  }
364
550
 
365
- BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) const BOOST_NOEXCEPT
551
+ BOOST_FORCEINLINE bool
552
+ compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::false_type) const noexcept
366
553
  {
367
- return core_operations::compare_exchange_weak(this->storage(), reinterpret_cast< storage_type& >(expected), static_cast< storage_type >(desired), success_order, failure_order);
554
+ return core_operations::compare_exchange_weak(
555
+ this->storage(), reinterpret_cast< storage_type& >(expected), static_cast< storage_type >(desired), success_order, failure_order);
368
556
  }
369
557
 
370
- BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) const BOOST_NOEXCEPT
558
+ BOOST_FORCEINLINE bool
559
+ compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::true_type) const noexcept
371
560
  {
372
561
  storage_type old_value = static_cast< storage_type >(expected);
373
562
  const bool res = core_operations::compare_exchange_weak(this->storage(), old_value, static_cast< storage_type >(desired), success_order, failure_order);
@@ -383,34 +572,37 @@ class base_atomic_ref< T, int, Interprocess > :
383
572
  public base_atomic_ref_common< T, atomics::detail::is_signed< T >::value, Interprocess >
384
573
  {
385
574
  private:
386
- typedef base_atomic_ref_common< T, atomics::detail::is_signed< T >::value, Interprocess > base_type;
575
+ using base_type = base_atomic_ref_common< T, atomics::detail::is_signed< T >::value, Interprocess >;
387
576
 
388
577
  public:
389
- typedef typename base_type::value_type value_type;
390
- typedef typename base_type::value_type difference_type;
578
+ using value_type = typename base_type::value_type;
579
+ using difference_type = typename base_type::value_type;
391
580
 
392
581
  protected:
393
- typedef typename base_type::core_operations core_operations;
394
- typedef typename base_type::wait_operations wait_operations;
395
- typedef atomics::detail::extra_operations< core_operations > extra_operations;
396
- typedef typename base_type::storage_type storage_type;
397
- typedef value_type value_arg_type;
582
+ using core_operations = typename base_type::core_operations;
583
+ using wait_operations = typename base_type::wait_operations;
584
+ using extra_operations = atomics::detail::extra_operations< core_operations >;
585
+ using storage_type = typename base_type::storage_type;
586
+ using value_arg_type = value_type;
398
587
 
399
588
  private:
589
+ using cxchg_use_bitwise_cast =
400
590
  #if !defined(BOOST_ATOMIC_DETAIL_STORAGE_TYPE_MAY_ALIAS) || !defined(BOOST_ATOMIC_NO_CLEAR_PADDING)
401
- typedef atomics::detail::true_type cxchg_use_bitwise_cast;
591
+ std::true_type;
402
592
  #else
403
- typedef atomics::detail::integral_constant< bool, atomics::detail::alignment_of< value_type >::value <= core_operations::storage_alignment > cxchg_use_bitwise_cast;
593
+ std::integral_constant< bool, atomics::detail::alignment_of< value_type >::value <= core_operations::storage_alignment >;
404
594
  #endif
405
595
 
406
596
  public:
407
- BOOST_DEFAULTED_FUNCTION(base_atomic_ref(base_atomic_ref const& that) BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_DECL, BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_IMPL : base_type(static_cast< base_type const& >(that)) {})
408
- BOOST_FORCEINLINE explicit base_atomic_ref(value_type& v) BOOST_NOEXCEPT : base_type(v)
597
+ base_atomic_ref(base_atomic_ref const&) = default;
598
+ BOOST_FORCEINLINE explicit base_atomic_ref(value_type& v) noexcept : base_type(v)
409
599
  {
410
600
  }
411
601
 
602
+ base_atomic_ref& operator=(base_atomic_ref const&) = delete;
603
+
412
604
  // Standard methods
413
- BOOST_FORCEINLINE void store(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
605
+ BOOST_FORCEINLINE void store(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
414
606
  {
415
607
  BOOST_ASSERT(order != memory_order_consume);
416
608
  BOOST_ASSERT(order != memory_order_acquire);
@@ -419,7 +611,7 @@ public:
419
611
  core_operations::store(this->storage(), static_cast< storage_type >(v), order);
420
612
  }
421
613
 
422
- BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
614
+ BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const noexcept
423
615
  {
424
616
  BOOST_ASSERT(order != memory_order_release);
425
617
  BOOST_ASSERT(order != memory_order_acq_rel);
@@ -427,22 +619,22 @@ public:
427
619
  return atomics::detail::bitwise_cast< value_type >(core_operations::load(this->storage(), order));
428
620
  }
429
621
 
430
- BOOST_FORCEINLINE value_type fetch_add(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
622
+ BOOST_FORCEINLINE value_type fetch_add(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
431
623
  {
432
624
  return atomics::detail::bitwise_cast< value_type >(core_operations::fetch_add(this->storage(), static_cast< storage_type >(v), order));
433
625
  }
434
626
 
435
- BOOST_FORCEINLINE value_type fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
627
+ BOOST_FORCEINLINE value_type fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
436
628
  {
437
629
  return atomics::detail::bitwise_cast< value_type >(core_operations::fetch_sub(this->storage(), static_cast< storage_type >(v), order));
438
630
  }
439
631
 
440
- BOOST_FORCEINLINE value_type exchange(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
632
+ BOOST_FORCEINLINE value_type exchange(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
441
633
  {
442
634
  return atomics::detail::bitwise_cast< value_type >(core_operations::exchange(this->storage(), static_cast< storage_type >(v), order));
443
635
  }
444
636
 
445
- BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const BOOST_NOEXCEPT
637
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const noexcept
446
638
  {
447
639
  BOOST_ASSERT(failure_order != memory_order_release);
448
640
  BOOST_ASSERT(failure_order != memory_order_acq_rel);
@@ -451,12 +643,12 @@ public:
451
643
  return compare_exchange_strong_impl(expected, desired, success_order, failure_order, cxchg_use_bitwise_cast());
452
644
  }
453
645
 
454
- BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
646
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const noexcept
455
647
  {
456
648
  return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order));
457
649
  }
458
650
 
459
- BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const BOOST_NOEXCEPT
651
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const noexcept
460
652
  {
461
653
  BOOST_ASSERT(failure_order != memory_order_release);
462
654
  BOOST_ASSERT(failure_order != memory_order_acq_rel);
@@ -465,207 +657,207 @@ public:
465
657
  return compare_exchange_weak_impl(expected, desired, success_order, failure_order, cxchg_use_bitwise_cast());
466
658
  }
467
659
 
468
- BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
660
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const noexcept
469
661
  {
470
662
  return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order));
471
663
  }
472
664
 
473
- BOOST_FORCEINLINE value_type fetch_and(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
665
+ BOOST_FORCEINLINE value_type fetch_and(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
474
666
  {
475
667
  return atomics::detail::bitwise_cast< value_type >(core_operations::fetch_and(this->storage(), static_cast< storage_type >(v), order));
476
668
  }
477
669
 
478
- BOOST_FORCEINLINE value_type fetch_or(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
670
+ BOOST_FORCEINLINE value_type fetch_or(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
479
671
  {
480
672
  return atomics::detail::bitwise_cast< value_type >(core_operations::fetch_or(this->storage(), static_cast< storage_type >(v), order));
481
673
  }
482
674
 
483
- BOOST_FORCEINLINE value_type fetch_xor(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
675
+ BOOST_FORCEINLINE value_type fetch_xor(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
484
676
  {
485
677
  return atomics::detail::bitwise_cast< value_type >(core_operations::fetch_xor(this->storage(), static_cast< storage_type >(v), order));
486
678
  }
487
679
 
488
680
  // Boost.Atomic extensions
489
- BOOST_FORCEINLINE value_type fetch_negate(memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
681
+ BOOST_FORCEINLINE value_type fetch_negate(memory_order order = memory_order_seq_cst) const noexcept
490
682
  {
491
683
  return atomics::detail::bitwise_cast< value_type >(extra_operations::fetch_negate(this->storage(), order));
492
684
  }
493
685
 
494
- BOOST_FORCEINLINE value_type fetch_complement(memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
686
+ BOOST_FORCEINLINE value_type fetch_complement(memory_order order = memory_order_seq_cst) const noexcept
495
687
  {
496
688
  return atomics::detail::bitwise_cast< value_type >(extra_operations::fetch_complement(this->storage(), order));
497
689
  }
498
690
 
499
- BOOST_FORCEINLINE value_type add(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
691
+ BOOST_FORCEINLINE value_type add(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
500
692
  {
501
693
  return atomics::detail::bitwise_cast< value_type >(extra_operations::add(this->storage(), static_cast< storage_type >(v), order));
502
694
  }
503
695
 
504
- BOOST_FORCEINLINE value_type sub(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
696
+ BOOST_FORCEINLINE value_type sub(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
505
697
  {
506
698
  return atomics::detail::bitwise_cast< value_type >(extra_operations::sub(this->storage(), static_cast< storage_type >(v), order));
507
699
  }
508
700
 
509
- BOOST_FORCEINLINE value_type negate(memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
701
+ BOOST_FORCEINLINE value_type negate(memory_order order = memory_order_seq_cst) const noexcept
510
702
  {
511
703
  return atomics::detail::bitwise_cast< value_type >(extra_operations::negate(this->storage(), order));
512
704
  }
513
705
 
514
- BOOST_FORCEINLINE value_type bitwise_and(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
706
+ BOOST_FORCEINLINE value_type bitwise_and(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
515
707
  {
516
708
  return atomics::detail::bitwise_cast< value_type >(extra_operations::bitwise_and(this->storage(), static_cast< storage_type >(v), order));
517
709
  }
518
710
 
519
- BOOST_FORCEINLINE value_type bitwise_or(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
711
+ BOOST_FORCEINLINE value_type bitwise_or(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
520
712
  {
521
713
  return atomics::detail::bitwise_cast< value_type >(extra_operations::bitwise_or(this->storage(), static_cast< storage_type >(v), order));
522
714
  }
523
715
 
524
- BOOST_FORCEINLINE value_type bitwise_xor(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
716
+ BOOST_FORCEINLINE value_type bitwise_xor(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
525
717
  {
526
718
  return atomics::detail::bitwise_cast< value_type >(extra_operations::bitwise_xor(this->storage(), static_cast< storage_type >(v), order));
527
719
  }
528
720
 
529
- BOOST_FORCEINLINE value_type bitwise_complement(memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
721
+ BOOST_FORCEINLINE value_type bitwise_complement(memory_order order = memory_order_seq_cst) const noexcept
530
722
  {
531
723
  return atomics::detail::bitwise_cast< value_type >(extra_operations::bitwise_complement(this->storage(), order));
532
724
  }
533
725
 
534
- BOOST_FORCEINLINE void opaque_add(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
726
+ BOOST_FORCEINLINE void opaque_add(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
535
727
  {
536
728
  extra_operations::opaque_add(this->storage(), static_cast< storage_type >(v), order);
537
729
  }
538
730
 
539
- BOOST_FORCEINLINE void opaque_sub(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
731
+ BOOST_FORCEINLINE void opaque_sub(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
540
732
  {
541
733
  extra_operations::opaque_sub(this->storage(), static_cast< storage_type >(v), order);
542
734
  }
543
735
 
544
- BOOST_FORCEINLINE void opaque_negate(memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
736
+ BOOST_FORCEINLINE void opaque_negate(memory_order order = memory_order_seq_cst) const noexcept
545
737
  {
546
738
  extra_operations::opaque_negate(this->storage(), order);
547
739
  }
548
740
 
549
- BOOST_FORCEINLINE void opaque_and(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
741
+ BOOST_FORCEINLINE void opaque_and(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
550
742
  {
551
743
  extra_operations::opaque_and(this->storage(), static_cast< storage_type >(v), order);
552
744
  }
553
745
 
554
- BOOST_FORCEINLINE void opaque_or(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
746
+ BOOST_FORCEINLINE void opaque_or(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
555
747
  {
556
748
  extra_operations::opaque_or(this->storage(), static_cast< storage_type >(v), order);
557
749
  }
558
750
 
559
- BOOST_FORCEINLINE void opaque_xor(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
751
+ BOOST_FORCEINLINE void opaque_xor(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
560
752
  {
561
753
  extra_operations::opaque_xor(this->storage(), static_cast< storage_type >(v), order);
562
754
  }
563
755
 
564
- BOOST_FORCEINLINE void opaque_complement(memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
756
+ BOOST_FORCEINLINE void opaque_complement(memory_order order = memory_order_seq_cst) const noexcept
565
757
  {
566
758
  extra_operations::opaque_complement(this->storage(), order);
567
759
  }
568
760
 
569
- BOOST_FORCEINLINE bool add_and_test(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
761
+ BOOST_FORCEINLINE bool add_and_test(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
570
762
  {
571
763
  return extra_operations::add_and_test(this->storage(), static_cast< storage_type >(v), order);
572
764
  }
573
765
 
574
- BOOST_FORCEINLINE bool sub_and_test(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
766
+ BOOST_FORCEINLINE bool sub_and_test(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
575
767
  {
576
768
  return extra_operations::sub_and_test(this->storage(), static_cast< storage_type >(v), order);
577
769
  }
578
770
 
579
- BOOST_FORCEINLINE bool negate_and_test(memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
771
+ BOOST_FORCEINLINE bool negate_and_test(memory_order order = memory_order_seq_cst) const noexcept
580
772
  {
581
773
  return extra_operations::negate_and_test(this->storage(), order);
582
774
  }
583
775
 
584
- BOOST_FORCEINLINE bool and_and_test(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
776
+ BOOST_FORCEINLINE bool and_and_test(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
585
777
  {
586
778
  return extra_operations::and_and_test(this->storage(), static_cast< storage_type >(v), order);
587
779
  }
588
780
 
589
- BOOST_FORCEINLINE bool or_and_test(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
781
+ BOOST_FORCEINLINE bool or_and_test(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
590
782
  {
591
783
  return extra_operations::or_and_test(this->storage(), static_cast< storage_type >(v), order);
592
784
  }
593
785
 
594
- BOOST_FORCEINLINE bool xor_and_test(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
786
+ BOOST_FORCEINLINE bool xor_and_test(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
595
787
  {
596
788
  return extra_operations::xor_and_test(this->storage(), static_cast< storage_type >(v), order);
597
789
  }
598
790
 
599
- BOOST_FORCEINLINE bool complement_and_test(memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
791
+ BOOST_FORCEINLINE bool complement_and_test(memory_order order = memory_order_seq_cst) const noexcept
600
792
  {
601
793
  return extra_operations::complement_and_test(this->storage(), order);
602
794
  }
603
795
 
604
- BOOST_FORCEINLINE bool bit_test_and_set(unsigned int bit_number, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
796
+ BOOST_FORCEINLINE bool bit_test_and_set(unsigned int bit_number, memory_order order = memory_order_seq_cst) const noexcept
605
797
  {
606
798
  BOOST_ASSERT(bit_number < sizeof(value_type) * 8u);
607
799
  return extra_operations::bit_test_and_set(this->storage(), bit_number, order);
608
800
  }
609
801
 
610
- BOOST_FORCEINLINE bool bit_test_and_reset(unsigned int bit_number, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
802
+ BOOST_FORCEINLINE bool bit_test_and_reset(unsigned int bit_number, memory_order order = memory_order_seq_cst) const noexcept
611
803
  {
612
804
  BOOST_ASSERT(bit_number < sizeof(value_type) * 8u);
613
805
  return extra_operations::bit_test_and_reset(this->storage(), bit_number, order);
614
806
  }
615
807
 
616
- BOOST_FORCEINLINE bool bit_test_and_complement(unsigned int bit_number, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
808
+ BOOST_FORCEINLINE bool bit_test_and_complement(unsigned int bit_number, memory_order order = memory_order_seq_cst) const noexcept
617
809
  {
618
810
  BOOST_ASSERT(bit_number < sizeof(value_type) * 8u);
619
811
  return extra_operations::bit_test_and_complement(this->storage(), bit_number, order);
620
812
  }
621
813
 
622
814
  // Operators
623
- BOOST_FORCEINLINE value_type operator++(int) const BOOST_NOEXCEPT
815
+ BOOST_FORCEINLINE value_type operator++(int) const noexcept
624
816
  {
625
817
  return fetch_add(1);
626
818
  }
627
819
 
628
- BOOST_FORCEINLINE value_type operator++() const BOOST_NOEXCEPT
820
+ BOOST_FORCEINLINE value_type operator++() const noexcept
629
821
  {
630
822
  return add(1);
631
823
  }
632
824
 
633
- BOOST_FORCEINLINE value_type operator--(int) const BOOST_NOEXCEPT
825
+ BOOST_FORCEINLINE value_type operator--(int) const noexcept
634
826
  {
635
827
  return fetch_sub(1);
636
828
  }
637
829
 
638
- BOOST_FORCEINLINE value_type operator--() const BOOST_NOEXCEPT
830
+ BOOST_FORCEINLINE value_type operator--() const noexcept
639
831
  {
640
832
  return sub(1);
641
833
  }
642
834
 
643
- BOOST_FORCEINLINE value_type operator+=(difference_type v) const BOOST_NOEXCEPT
835
+ BOOST_FORCEINLINE value_type operator+=(difference_type v) const noexcept
644
836
  {
645
837
  return add(v);
646
838
  }
647
839
 
648
- BOOST_FORCEINLINE value_type operator-=(difference_type v) const BOOST_NOEXCEPT
840
+ BOOST_FORCEINLINE value_type operator-=(difference_type v) const noexcept
649
841
  {
650
842
  return sub(v);
651
843
  }
652
844
 
653
- BOOST_FORCEINLINE value_type operator&=(value_type v) const BOOST_NOEXCEPT
845
+ BOOST_FORCEINLINE value_type operator&=(value_type v) const noexcept
654
846
  {
655
847
  return bitwise_and(v);
656
848
  }
657
849
 
658
- BOOST_FORCEINLINE value_type operator|=(value_type v) const BOOST_NOEXCEPT
850
+ BOOST_FORCEINLINE value_type operator|=(value_type v) const noexcept
659
851
  {
660
852
  return bitwise_or(v);
661
853
  }
662
854
 
663
- BOOST_FORCEINLINE value_type operator^=(value_type v) const BOOST_NOEXCEPT
855
+ BOOST_FORCEINLINE value_type operator^=(value_type v) const noexcept
664
856
  {
665
857
  return bitwise_xor(v);
666
858
  }
667
859
 
668
- BOOST_FORCEINLINE value_type wait(value_arg_type old_val, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
860
+ BOOST_FORCEINLINE value_type wait(value_arg_type old_val, memory_order order = memory_order_seq_cst) const noexcept
669
861
  {
670
862
  BOOST_ASSERT(order != memory_order_release);
671
863
  BOOST_ASSERT(order != memory_order_acq_rel);
@@ -673,15 +865,44 @@ public:
673
865
  return atomics::detail::bitwise_cast< value_type >(wait_operations::wait(this->storage(), static_cast< storage_type >(old_val), order));
674
866
  }
675
867
 
676
- BOOST_DELETED_FUNCTION(base_atomic_ref& operator=(base_atomic_ref const&))
868
+ template< typename Clock, typename Duration >
869
+ BOOST_FORCEINLINE wait_result< value_type >
870
+ wait_until(value_arg_type old_val, std::chrono::time_point< Clock, Duration > timeout, memory_order order = memory_order_seq_cst) const
871
+ noexcept(noexcept(wait_operations::wait_until(
872
+ std::declval< storage_type const volatile& >(), std::declval< storage_type >(), timeout, order, std::declval< bool& >())))
873
+ {
874
+ BOOST_ASSERT(order != memory_order_release);
875
+ BOOST_ASSERT(order != memory_order_acq_rel);
876
+
877
+ bool timed_out = false;
878
+ storage_type new_value = wait_operations::wait_until(this->storage(), static_cast< storage_type >(old_val), timeout, order, timed_out);
879
+ return wait_result< value_type >(atomics::detail::bitwise_cast< value_type >(new_value), timed_out);
880
+ }
881
+
882
+ template< typename Rep, typename Period >
883
+ BOOST_FORCEINLINE wait_result< value_type >
884
+ wait_for(value_arg_type old_val, std::chrono::duration< Rep, Period > timeout, memory_order order = memory_order_seq_cst) const
885
+ noexcept(noexcept(wait_operations::wait_for(
886
+ std::declval< storage_type const volatile& >(), std::declval< storage_type >(), timeout, order, std::declval< bool& >())))
887
+ {
888
+ BOOST_ASSERT(order != memory_order_release);
889
+ BOOST_ASSERT(order != memory_order_acq_rel);
890
+
891
+ bool timed_out = false;
892
+ storage_type new_value = wait_operations::wait_for(this->storage(), static_cast< storage_type >(old_val), timeout, order, timed_out);
893
+ return wait_result< value_type >(atomics::detail::bitwise_cast< value_type >(new_value), timed_out);
894
+ }
677
895
 
678
896
  private:
679
- BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) const BOOST_NOEXCEPT
897
+ BOOST_FORCEINLINE bool
898
+ compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::false_type) const noexcept
680
899
  {
681
- return core_operations::compare_exchange_strong(this->storage(), reinterpret_cast< storage_type& >(expected), static_cast< storage_type >(desired), success_order, failure_order);
900
+ return core_operations::compare_exchange_strong(
901
+ this->storage(), reinterpret_cast< storage_type& >(expected), static_cast< storage_type >(desired), success_order, failure_order);
682
902
  }
683
903
 
684
- BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) const BOOST_NOEXCEPT
904
+ BOOST_FORCEINLINE bool
905
+ compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::true_type) const noexcept
685
906
  {
686
907
  storage_type old_value = static_cast< storage_type >(expected);
687
908
  const bool res = core_operations::compare_exchange_strong(this->storage(), old_value, static_cast< storage_type >(desired), success_order, failure_order);
@@ -689,12 +910,15 @@ private:
689
910
  return res;
690
911
  }
691
912
 
692
- BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) const BOOST_NOEXCEPT
913
+ BOOST_FORCEINLINE bool
914
+ compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::false_type) const noexcept
693
915
  {
694
- return core_operations::compare_exchange_weak(this->storage(), reinterpret_cast< storage_type& >(expected), static_cast< storage_type >(desired), success_order, failure_order);
916
+ return core_operations::compare_exchange_weak(
917
+ this->storage(), reinterpret_cast< storage_type& >(expected), static_cast< storage_type >(desired), success_order, failure_order);
695
918
  }
696
919
 
697
- BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) const BOOST_NOEXCEPT
920
+ BOOST_FORCEINLINE bool
921
+ compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::true_type) const noexcept
698
922
  {
699
923
  storage_type old_value = static_cast< storage_type >(expected);
700
924
  const bool res = core_operations::compare_exchange_weak(this->storage(), old_value, static_cast< storage_type >(desired), success_order, failure_order);
@@ -709,32 +933,35 @@ class base_atomic_ref< bool, int, Interprocess > :
709
933
  public base_atomic_ref_common< bool, false, Interprocess >
710
934
  {
711
935
  private:
712
- typedef base_atomic_ref_common< bool, false, Interprocess > base_type;
936
+ using base_type = base_atomic_ref_common< bool, false, Interprocess >;
713
937
 
714
938
  public:
715
- typedef bool value_type;
939
+ using value_type = bool;
716
940
 
717
941
  protected:
718
- typedef typename base_type::core_operations core_operations;
719
- typedef typename base_type::wait_operations wait_operations;
720
- typedef typename base_type::storage_type storage_type;
721
- typedef value_type value_arg_type;
942
+ using core_operations = typename base_type::core_operations;
943
+ using wait_operations = typename base_type::wait_operations;
944
+ using storage_type = typename base_type::storage_type;
945
+ using value_arg_type = value_type;
722
946
 
723
947
  private:
948
+ using cxchg_use_bitwise_cast =
724
949
  #if !defined(BOOST_ATOMIC_DETAIL_STORAGE_TYPE_MAY_ALIAS) || !defined(BOOST_ATOMIC_NO_CLEAR_PADDING)
725
- typedef atomics::detail::true_type cxchg_use_bitwise_cast;
950
+ std::true_type;
726
951
  #else
727
- typedef atomics::detail::integral_constant< bool, atomics::detail::alignment_of< value_type >::value <= core_operations::storage_alignment > cxchg_use_bitwise_cast;
952
+ std::integral_constant< bool, atomics::detail::alignment_of< value_type >::value <= core_operations::storage_alignment >;
728
953
  #endif
729
954
 
730
955
  public:
731
- BOOST_DEFAULTED_FUNCTION(base_atomic_ref(base_atomic_ref const& that) BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_DECL, BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_IMPL : base_type(static_cast< base_type const& >(that)) {})
732
- BOOST_FORCEINLINE explicit base_atomic_ref(value_type& v) BOOST_NOEXCEPT : base_type(v)
956
+ base_atomic_ref(base_atomic_ref const&) = default;
957
+ BOOST_FORCEINLINE explicit base_atomic_ref(value_type& v) noexcept : base_type(v)
733
958
  {
734
959
  }
735
960
 
961
+ base_atomic_ref& operator=(base_atomic_ref const&) = delete;
962
+
736
963
  // Standard methods
737
- BOOST_FORCEINLINE void store(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
964
+ BOOST_FORCEINLINE void store(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
738
965
  {
739
966
  BOOST_ASSERT(order != memory_order_consume);
740
967
  BOOST_ASSERT(order != memory_order_acquire);
@@ -743,7 +970,7 @@ public:
743
970
  core_operations::store(this->storage(), static_cast< storage_type >(v), order);
744
971
  }
745
972
 
746
- BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
973
+ BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const noexcept
747
974
  {
748
975
  BOOST_ASSERT(order != memory_order_release);
749
976
  BOOST_ASSERT(order != memory_order_acq_rel);
@@ -751,12 +978,12 @@ public:
751
978
  return !!core_operations::load(this->storage(), order);
752
979
  }
753
980
 
754
- BOOST_FORCEINLINE value_type exchange(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
981
+ BOOST_FORCEINLINE value_type exchange(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
755
982
  {
756
983
  return !!core_operations::exchange(this->storage(), static_cast< storage_type >(v), order);
757
984
  }
758
985
 
759
- BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const BOOST_NOEXCEPT
986
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const noexcept
760
987
  {
761
988
  BOOST_ASSERT(failure_order != memory_order_release);
762
989
  BOOST_ASSERT(failure_order != memory_order_acq_rel);
@@ -765,12 +992,12 @@ public:
765
992
  return compare_exchange_strong_impl(expected, desired, success_order, failure_order, cxchg_use_bitwise_cast());
766
993
  }
767
994
 
768
- BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
995
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const noexcept
769
996
  {
770
997
  return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order));
771
998
  }
772
999
 
773
- BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const BOOST_NOEXCEPT
1000
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const noexcept
774
1001
  {
775
1002
  BOOST_ASSERT(failure_order != memory_order_release);
776
1003
  BOOST_ASSERT(failure_order != memory_order_acq_rel);
@@ -779,12 +1006,12 @@ public:
779
1006
  return compare_exchange_weak_impl(expected, desired, success_order, failure_order, cxchg_use_bitwise_cast());
780
1007
  }
781
1008
 
782
- BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1009
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const noexcept
783
1010
  {
784
1011
  return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order));
785
1012
  }
786
1013
 
787
- BOOST_FORCEINLINE value_type wait(value_arg_type old_val, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1014
+ BOOST_FORCEINLINE value_type wait(value_arg_type old_val, memory_order order = memory_order_seq_cst) const noexcept
788
1015
  {
789
1016
  BOOST_ASSERT(order != memory_order_release);
790
1017
  BOOST_ASSERT(order != memory_order_acq_rel);
@@ -792,15 +1019,44 @@ public:
792
1019
  return !!wait_operations::wait(this->storage(), static_cast< storage_type >(old_val), order);
793
1020
  }
794
1021
 
795
- BOOST_DELETED_FUNCTION(base_atomic_ref& operator=(base_atomic_ref const&))
1022
+ template< typename Clock, typename Duration >
1023
+ BOOST_FORCEINLINE wait_result< value_type >
1024
+ wait_until(value_arg_type old_val, std::chrono::time_point< Clock, Duration > timeout, memory_order order = memory_order_seq_cst) const
1025
+ noexcept(noexcept(wait_operations::wait_until(
1026
+ std::declval< storage_type const volatile& >(), std::declval< storage_type >(), timeout, order, std::declval< bool& >())))
1027
+ {
1028
+ BOOST_ASSERT(order != memory_order_release);
1029
+ BOOST_ASSERT(order != memory_order_acq_rel);
1030
+
1031
+ bool timed_out = false;
1032
+ storage_type new_value = wait_operations::wait_until(this->storage(), static_cast< storage_type >(old_val), timeout, order, timed_out);
1033
+ return wait_result< value_type >(!!new_value, timed_out);
1034
+ }
1035
+
1036
+ template< typename Rep, typename Period >
1037
+ BOOST_FORCEINLINE wait_result< value_type >
1038
+ wait_for(value_arg_type old_val, std::chrono::duration< Rep, Period > timeout, memory_order order = memory_order_seq_cst) const
1039
+ noexcept(noexcept(wait_operations::wait_for(
1040
+ std::declval< storage_type const volatile& >(), std::declval< storage_type >(), timeout, order, std::declval< bool& >())))
1041
+ {
1042
+ BOOST_ASSERT(order != memory_order_release);
1043
+ BOOST_ASSERT(order != memory_order_acq_rel);
1044
+
1045
+ bool timed_out = false;
1046
+ storage_type new_value = wait_operations::wait_for(this->storage(), static_cast< storage_type >(old_val), timeout, order, timed_out);
1047
+ return wait_result< value_type >(!!new_value, timed_out);
1048
+ }
796
1049
 
797
1050
  private:
798
- BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) const BOOST_NOEXCEPT
1051
+ BOOST_FORCEINLINE bool
1052
+ compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::false_type) const noexcept
799
1053
  {
800
- return core_operations::compare_exchange_strong(this->storage(), reinterpret_cast< storage_type& >(expected), static_cast< storage_type >(desired), success_order, failure_order);
1054
+ return core_operations::compare_exchange_strong(
1055
+ this->storage(), reinterpret_cast< storage_type& >(expected), static_cast< storage_type >(desired), success_order, failure_order);
801
1056
  }
802
1057
 
803
- BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) const BOOST_NOEXCEPT
1058
+ BOOST_FORCEINLINE bool
1059
+ compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::true_type) const noexcept
804
1060
  {
805
1061
  storage_type old_value = static_cast< storage_type >(expected);
806
1062
  const bool res = core_operations::compare_exchange_strong(this->storage(), old_value, static_cast< storage_type >(desired), success_order, failure_order);
@@ -808,12 +1064,15 @@ private:
808
1064
  return res;
809
1065
  }
810
1066
 
811
- BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) const BOOST_NOEXCEPT
1067
+ BOOST_FORCEINLINE bool
1068
+ compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::false_type) const noexcept
812
1069
  {
813
- return core_operations::compare_exchange_weak(this->storage(), reinterpret_cast< storage_type& >(expected), static_cast< storage_type >(desired), success_order, failure_order);
1070
+ return core_operations::compare_exchange_weak(
1071
+ this->storage(), reinterpret_cast< storage_type& >(expected), static_cast< storage_type >(desired), success_order, failure_order);
814
1072
  }
815
1073
 
816
- BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) const BOOST_NOEXCEPT
1074
+ BOOST_FORCEINLINE bool
1075
+ compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::true_type) const noexcept
817
1076
  {
818
1077
  storage_type old_value = static_cast< storage_type >(expected);
819
1078
  const bool res = core_operations::compare_exchange_weak(this->storage(), old_value, static_cast< storage_type >(desired), success_order, failure_order);
@@ -831,34 +1090,35 @@ class base_atomic_ref< T, float, Interprocess > :
831
1090
  public base_atomic_ref_common< T, false, Interprocess >
832
1091
  {
833
1092
  private:
834
- typedef base_atomic_ref_common< T, false, Interprocess > base_type;
1093
+ using base_type = base_atomic_ref_common< T, false, Interprocess >;
835
1094
 
836
1095
  public:
837
- typedef typename base_type::value_type value_type;
838
- typedef typename base_type::value_type difference_type;
1096
+ using value_type = typename base_type::value_type;
1097
+ using difference_type = typename base_type::value_type;
839
1098
 
840
1099
  protected:
841
- typedef typename base_type::core_operations core_operations;
842
- typedef typename base_type::wait_operations wait_operations;
843
- typedef atomics::detail::extra_operations< core_operations > extra_operations;
844
- typedef atomics::detail::fp_operations< extra_operations, value_type > fp_operations;
845
- typedef atomics::detail::extra_fp_operations< fp_operations > extra_fp_operations;
846
- typedef typename base_type::storage_type storage_type;
847
- typedef value_type value_arg_type;
1100
+ using core_operations = typename base_type::core_operations;
1101
+ using wait_operations = typename base_type::wait_operations;
1102
+ using extra_operations = atomics::detail::extra_operations< core_operations >;
1103
+ using fp_operations = atomics::detail::fp_operations< extra_operations, value_type >;
1104
+ using extra_fp_operations = atomics::detail::extra_fp_operations< fp_operations >;
1105
+ using storage_type = typename base_type::storage_type;
1106
+ using value_arg_type = value_type;
848
1107
 
849
1108
  private:
850
1109
  #if defined(BOOST_ATOMIC_DETAIL_STORAGE_TYPE_MAY_ALIAS) || defined(BOOST_ATOMIC_NO_CLEAR_PADDING)
851
- typedef atomics::detail::integral_constant< bool, atomics::detail::value_size_of< value_type >::value != sizeof(storage_type) > has_padding_bits;
1110
+ using has_padding_bits = std::integral_constant< bool, atomics::detail::value_size_of< value_type >::value != sizeof(storage_type) >;
852
1111
  #endif
1112
+ using cxchg_use_bitwise_cast =
853
1113
  #if !defined(BOOST_ATOMIC_DETAIL_STORAGE_TYPE_MAY_ALIAS) || !defined(BOOST_ATOMIC_NO_CLEAR_PADDING)
854
- typedef atomics::detail::true_type cxchg_use_bitwise_cast;
1114
+ std::true_type;
855
1115
  #else
856
- typedef atomics::detail::integral_constant< bool, has_padding_bits::value || atomics::detail::alignment_of< value_type >::value <= core_operations::storage_alignment > cxchg_use_bitwise_cast;
1116
+ std::integral_constant< bool, has_padding_bits::value || atomics::detail::alignment_of< value_type >::value <= core_operations::storage_alignment >;
857
1117
  #endif
858
1118
 
859
1119
  public:
860
- BOOST_DEFAULTED_FUNCTION(base_atomic_ref(base_atomic_ref const& that) BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_DECL, BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_IMPL : base_type(static_cast< base_type const& >(that)) {})
861
- BOOST_FORCEINLINE explicit base_atomic_ref(value_type& v) BOOST_NOEXCEPT : base_type(v)
1120
+ base_atomic_ref(base_atomic_ref const&) = default;
1121
+ BOOST_FORCEINLINE explicit base_atomic_ref(value_type& v) noexcept : base_type(v)
862
1122
  {
863
1123
  // We only need to call clear_padding_bits if the compiler does not implement
864
1124
  // BOOST_ATOMIC_DETAIL_CLEAR_PADDING, which is called in the base class constructor.
@@ -867,7 +1127,9 @@ public:
867
1127
  #endif // defined(BOOST_ATOMIC_NO_CLEAR_PADDING)
868
1128
  }
869
1129
 
870
- BOOST_FORCEINLINE void store(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1130
+ base_atomic_ref& operator=(base_atomic_ref const&) = delete;
1131
+
1132
+ BOOST_FORCEINLINE void store(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
871
1133
  {
872
1134
  BOOST_ASSERT(order != memory_order_consume);
873
1135
  BOOST_ASSERT(order != memory_order_acquire);
@@ -876,7 +1138,7 @@ public:
876
1138
  core_operations::store(this->storage(), atomics::detail::bitwise_fp_cast< storage_type >(v), order);
877
1139
  }
878
1140
 
879
- BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1141
+ BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const noexcept
880
1142
  {
881
1143
  BOOST_ASSERT(order != memory_order_release);
882
1144
  BOOST_ASSERT(order != memory_order_acq_rel);
@@ -884,22 +1146,22 @@ public:
884
1146
  return atomics::detail::bitwise_fp_cast< value_type >(core_operations::load(this->storage(), order));
885
1147
  }
886
1148
 
887
- BOOST_FORCEINLINE value_type fetch_add(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1149
+ BOOST_FORCEINLINE value_type fetch_add(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
888
1150
  {
889
1151
  return fp_operations::fetch_add(this->storage(), v, order);
890
1152
  }
891
1153
 
892
- BOOST_FORCEINLINE value_type fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1154
+ BOOST_FORCEINLINE value_type fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
893
1155
  {
894
1156
  return fp_operations::fetch_sub(this->storage(), v, order);
895
1157
  }
896
1158
 
897
- BOOST_FORCEINLINE value_type exchange(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1159
+ BOOST_FORCEINLINE value_type exchange(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
898
1160
  {
899
1161
  return atomics::detail::bitwise_fp_cast< value_type >(core_operations::exchange(this->storage(), atomics::detail::bitwise_fp_cast< storage_type >(v), order));
900
1162
  }
901
1163
 
902
- BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const BOOST_NOEXCEPT
1164
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const noexcept
903
1165
  {
904
1166
  BOOST_ASSERT(failure_order != memory_order_release);
905
1167
  BOOST_ASSERT(failure_order != memory_order_acq_rel);
@@ -908,12 +1170,12 @@ public:
908
1170
  return compare_exchange_strong_impl(expected, desired, success_order, failure_order, cxchg_use_bitwise_cast());
909
1171
  }
910
1172
 
911
- BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1173
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const noexcept
912
1174
  {
913
1175
  return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order));
914
1176
  }
915
1177
 
916
- BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const BOOST_NOEXCEPT
1178
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const noexcept
917
1179
  {
918
1180
  BOOST_ASSERT(failure_order != memory_order_release);
919
1181
  BOOST_ASSERT(failure_order != memory_order_acq_rel);
@@ -922,59 +1184,59 @@ public:
922
1184
  return compare_exchange_weak_impl(expected, desired, success_order, failure_order, cxchg_use_bitwise_cast());
923
1185
  }
924
1186
 
925
- BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1187
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const noexcept
926
1188
  {
927
1189
  return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order));
928
1190
  }
929
1191
 
930
1192
  // Boost.Atomic extensions
931
- BOOST_FORCEINLINE value_type fetch_negate(memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1193
+ BOOST_FORCEINLINE value_type fetch_negate(memory_order order = memory_order_seq_cst) const noexcept
932
1194
  {
933
1195
  return extra_fp_operations::fetch_negate(this->storage(), order);
934
1196
  }
935
1197
 
936
- BOOST_FORCEINLINE value_type add(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1198
+ BOOST_FORCEINLINE value_type add(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
937
1199
  {
938
1200
  return extra_fp_operations::add(this->storage(), v, order);
939
1201
  }
940
1202
 
941
- BOOST_FORCEINLINE value_type sub(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1203
+ BOOST_FORCEINLINE value_type sub(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
942
1204
  {
943
1205
  return extra_fp_operations::sub(this->storage(), v, order);
944
1206
  }
945
1207
 
946
- BOOST_FORCEINLINE value_type negate(memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1208
+ BOOST_FORCEINLINE value_type negate(memory_order order = memory_order_seq_cst) const noexcept
947
1209
  {
948
1210
  return extra_fp_operations::negate(this->storage(), order);
949
1211
  }
950
1212
 
951
- BOOST_FORCEINLINE void opaque_add(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1213
+ BOOST_FORCEINLINE void opaque_add(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
952
1214
  {
953
1215
  extra_fp_operations::opaque_add(this->storage(), v, order);
954
1216
  }
955
1217
 
956
- BOOST_FORCEINLINE void opaque_sub(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1218
+ BOOST_FORCEINLINE void opaque_sub(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
957
1219
  {
958
1220
  extra_fp_operations::opaque_sub(this->storage(), v, order);
959
1221
  }
960
1222
 
961
- BOOST_FORCEINLINE void opaque_negate(memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1223
+ BOOST_FORCEINLINE void opaque_negate(memory_order order = memory_order_seq_cst) const noexcept
962
1224
  {
963
1225
  extra_fp_operations::opaque_negate(this->storage(), order);
964
1226
  }
965
1227
 
966
1228
  // Operators
967
- BOOST_FORCEINLINE value_type operator+=(difference_type v) const BOOST_NOEXCEPT
1229
+ BOOST_FORCEINLINE value_type operator+=(difference_type v) const noexcept
968
1230
  {
969
1231
  return add(v);
970
1232
  }
971
1233
 
972
- BOOST_FORCEINLINE value_type operator-=(difference_type v) const BOOST_NOEXCEPT
1234
+ BOOST_FORCEINLINE value_type operator-=(difference_type v) const noexcept
973
1235
  {
974
1236
  return sub(v);
975
1237
  }
976
1238
 
977
- BOOST_FORCEINLINE value_type wait(value_arg_type old_val, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1239
+ BOOST_FORCEINLINE value_type wait(value_arg_type old_val, memory_order order = memory_order_seq_cst) const noexcept
978
1240
  {
979
1241
  BOOST_ASSERT(order != memory_order_release);
980
1242
  BOOST_ASSERT(order != memory_order_acq_rel);
@@ -982,42 +1244,76 @@ public:
982
1244
  return atomics::detail::bitwise_fp_cast< value_type >(wait_operations::wait(this->storage(), atomics::detail::bitwise_fp_cast< storage_type >(old_val), order));
983
1245
  }
984
1246
 
985
- BOOST_DELETED_FUNCTION(base_atomic_ref& operator=(base_atomic_ref const&))
1247
+ template< typename Clock, typename Duration >
1248
+ BOOST_FORCEINLINE wait_result< value_type >
1249
+ wait_until(value_arg_type old_val, std::chrono::time_point< Clock, Duration > timeout, memory_order order = memory_order_seq_cst) const
1250
+ noexcept(noexcept(wait_operations::wait_until(
1251
+ std::declval< storage_type const volatile& >(), std::declval< storage_type >(), timeout, order, std::declval< bool& >())))
1252
+ {
1253
+ BOOST_ASSERT(order != memory_order_release);
1254
+ BOOST_ASSERT(order != memory_order_acq_rel);
1255
+
1256
+ bool timed_out = false;
1257
+ storage_type new_value = wait_operations::wait_until(this->storage(), atomics::detail::bitwise_fp_cast< storage_type >(old_val), timeout, order, timed_out);
1258
+ return wait_result< value_type >(atomics::detail::bitwise_fp_cast< value_type >(new_value), timed_out);
1259
+ }
1260
+
1261
+ template< typename Rep, typename Period >
1262
+ BOOST_FORCEINLINE wait_result< value_type >
1263
+ wait_for(value_arg_type old_val, std::chrono::duration< Rep, Period > timeout, memory_order order = memory_order_seq_cst) const
1264
+ noexcept(noexcept(wait_operations::wait_for(
1265
+ std::declval< storage_type const volatile& >(), std::declval< storage_type >(), timeout, order, std::declval< bool& >())))
1266
+ {
1267
+ BOOST_ASSERT(order != memory_order_release);
1268
+ BOOST_ASSERT(order != memory_order_acq_rel);
1269
+
1270
+ bool timed_out = false;
1271
+ storage_type new_value = wait_operations::wait_for(this->storage(), atomics::detail::bitwise_fp_cast< storage_type >(old_val), timeout, order, timed_out);
1272
+ return wait_result< value_type >(atomics::detail::bitwise_fp_cast< value_type >(new_value), timed_out);
1273
+ }
986
1274
 
987
1275
  private:
988
1276
  #if defined(BOOST_ATOMIC_NO_CLEAR_PADDING)
989
- BOOST_FORCEINLINE void clear_padding_bits(atomics::detail::false_type) const BOOST_NOEXCEPT
1277
+ BOOST_FORCEINLINE void clear_padding_bits(std::false_type) const noexcept
990
1278
  {
991
1279
  }
992
1280
 
993
- BOOST_FORCEINLINE void clear_padding_bits(atomics::detail::true_type) const BOOST_NOEXCEPT
1281
+ BOOST_FORCEINLINE void clear_padding_bits(std::true_type) const noexcept
994
1282
  {
995
1283
  atomics::detail::clear_tail_padding_bits< atomics::detail::value_size_of< value_type >::value >(this->storage());
996
1284
  }
997
1285
  #endif // defined(BOOST_ATOMIC_NO_CLEAR_PADDING)
998
1286
 
999
- BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) const BOOST_NOEXCEPT
1287
+ BOOST_FORCEINLINE bool
1288
+ compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::false_type) const noexcept
1000
1289
  {
1001
- return core_operations::compare_exchange_strong(this->storage(), reinterpret_cast< storage_type& >(expected), atomics::detail::bitwise_fp_cast< storage_type >(desired), success_order, failure_order);
1290
+ return core_operations::compare_exchange_strong(
1291
+ this->storage(), reinterpret_cast< storage_type& >(expected), atomics::detail::bitwise_fp_cast< storage_type >(desired), success_order, failure_order);
1002
1292
  }
1003
1293
 
1004
- BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) const BOOST_NOEXCEPT
1294
+ BOOST_FORCEINLINE bool
1295
+ compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::true_type) const noexcept
1005
1296
  {
1006
1297
  storage_type old_value = atomics::detail::bitwise_fp_cast< storage_type >(expected);
1007
- const bool res = core_operations::compare_exchange_strong(this->storage(), old_value, atomics::detail::bitwise_fp_cast< storage_type >(desired), success_order, failure_order);
1298
+ const bool res = core_operations::compare_exchange_strong(
1299
+ this->storage(), old_value, atomics::detail::bitwise_fp_cast< storage_type >(desired), success_order, failure_order);
1008
1300
  expected = atomics::detail::bitwise_fp_cast< value_type >(old_value);
1009
1301
  return res;
1010
1302
  }
1011
1303
 
1012
- BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) const BOOST_NOEXCEPT
1304
+ BOOST_FORCEINLINE bool
1305
+ compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::false_type) const noexcept
1013
1306
  {
1014
- return core_operations::compare_exchange_weak(this->storage(), reinterpret_cast< storage_type& >(expected), atomics::detail::bitwise_fp_cast< storage_type >(desired), success_order, failure_order);
1307
+ return core_operations::compare_exchange_weak(
1308
+ this->storage(), reinterpret_cast< storage_type& >(expected), atomics::detail::bitwise_fp_cast< storage_type >(desired), success_order, failure_order);
1015
1309
  }
1016
1310
 
1017
- BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) const BOOST_NOEXCEPT
1311
+ BOOST_FORCEINLINE bool
1312
+ compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::true_type) const noexcept
1018
1313
  {
1019
1314
  storage_type old_value = atomics::detail::bitwise_fp_cast< storage_type >(expected);
1020
- const bool res = core_operations::compare_exchange_weak(this->storage(), old_value, atomics::detail::bitwise_fp_cast< storage_type >(desired), success_order, failure_order);
1315
+ const bool res = core_operations::compare_exchange_weak(
1316
+ this->storage(), old_value, atomics::detail::bitwise_fp_cast< storage_type >(desired), success_order, failure_order);
1021
1317
  expected = atomics::detail::bitwise_fp_cast< value_type >(old_value);
1022
1318
  return res;
1023
1319
  }
@@ -1032,34 +1328,37 @@ class base_atomic_ref< T*, void*, Interprocess > :
1032
1328
  public base_atomic_ref_common< T*, false, Interprocess >
1033
1329
  {
1034
1330
  private:
1035
- typedef base_atomic_ref_common< T*, false, Interprocess > base_type;
1331
+ using base_type = base_atomic_ref_common< T*, false, Interprocess >;
1036
1332
 
1037
1333
  public:
1038
- typedef typename base_type::value_type value_type;
1039
- typedef std::ptrdiff_t difference_type;
1334
+ using value_type = typename base_type::value_type;
1335
+ using difference_type = std::ptrdiff_t;
1040
1336
 
1041
1337
  protected:
1042
- typedef typename base_type::core_operations core_operations;
1043
- typedef typename base_type::wait_operations wait_operations;
1044
- typedef atomics::detail::extra_operations< core_operations > extra_operations;
1045
- typedef typename base_type::storage_type storage_type;
1046
- typedef value_type value_arg_type;
1338
+ using core_operations = typename base_type::core_operations;
1339
+ using wait_operations = typename base_type::wait_operations;
1340
+ using extra_operations = atomics::detail::extra_operations< core_operations >;
1341
+ using storage_type = typename base_type::storage_type;
1342
+ using value_arg_type = value_type;
1047
1343
 
1048
1344
  private:
1345
+ using cxchg_use_bitwise_cast =
1049
1346
  #if !defined(BOOST_ATOMIC_DETAIL_STORAGE_TYPE_MAY_ALIAS) || !defined(BOOST_ATOMIC_NO_CLEAR_PADDING)
1050
- typedef atomics::detail::true_type cxchg_use_bitwise_cast;
1347
+ std::true_type;
1051
1348
  #else
1052
- typedef atomics::detail::integral_constant< bool, atomics::detail::alignment_of< value_type >::value <= core_operations::storage_alignment > cxchg_use_bitwise_cast;
1349
+ std::integral_constant< bool, atomics::detail::alignment_of< value_type >::value <= core_operations::storage_alignment >;
1053
1350
  #endif
1054
1351
 
1055
1352
  public:
1056
- BOOST_DEFAULTED_FUNCTION(base_atomic_ref(base_atomic_ref const& that) BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_DECL, BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_IMPL : base_type(static_cast< base_type const& >(that)) {})
1057
- BOOST_FORCEINLINE explicit base_atomic_ref(value_type& v) BOOST_NOEXCEPT : base_type(v)
1353
+ base_atomic_ref(base_atomic_ref const&) = default;
1354
+ BOOST_FORCEINLINE explicit base_atomic_ref(value_type& v) noexcept : base_type(v)
1058
1355
  {
1059
1356
  }
1060
1357
 
1358
+ base_atomic_ref& operator=(base_atomic_ref const&) = delete;
1359
+
1061
1360
  // Standard methods
1062
- BOOST_FORCEINLINE void store(value_arg_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1361
+ BOOST_FORCEINLINE void store(value_arg_type v, memory_order order = memory_order_seq_cst) const noexcept
1063
1362
  {
1064
1363
  BOOST_ASSERT(order != memory_order_consume);
1065
1364
  BOOST_ASSERT(order != memory_order_acquire);
@@ -1068,7 +1367,7 @@ public:
1068
1367
  core_operations::store(this->storage(), atomics::detail::bitwise_cast< storage_type >(v), order);
1069
1368
  }
1070
1369
 
1071
- BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1370
+ BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const noexcept
1072
1371
  {
1073
1372
  BOOST_ASSERT(order != memory_order_release);
1074
1373
  BOOST_ASSERT(order != memory_order_acq_rel);
@@ -1076,22 +1375,22 @@ public:
1076
1375
  return atomics::detail::bitwise_cast< value_type >(core_operations::load(this->storage(), order));
1077
1376
  }
1078
1377
 
1079
- BOOST_FORCEINLINE value_type fetch_add(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1378
+ BOOST_FORCEINLINE value_type fetch_add(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
1080
1379
  {
1081
1380
  return atomics::detail::bitwise_cast< value_type >(core_operations::fetch_add(this->storage(), static_cast< storage_type >(v * sizeof(T)), order));
1082
1381
  }
1083
1382
 
1084
- BOOST_FORCEINLINE value_type fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1383
+ BOOST_FORCEINLINE value_type fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
1085
1384
  {
1086
1385
  return atomics::detail::bitwise_cast< value_type >(core_operations::fetch_sub(this->storage(), static_cast< storage_type >(v * sizeof(T)), order));
1087
1386
  }
1088
1387
 
1089
- BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1388
+ BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) const noexcept
1090
1389
  {
1091
1390
  return atomics::detail::bitwise_cast< value_type >(core_operations::exchange(this->storage(), atomics::detail::bitwise_cast< storage_type >(v), order));
1092
1391
  }
1093
1392
 
1094
- BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const BOOST_NOEXCEPT
1393
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const noexcept
1095
1394
  {
1096
1395
  BOOST_ASSERT(failure_order != memory_order_release);
1097
1396
  BOOST_ASSERT(failure_order != memory_order_acq_rel);
@@ -1100,12 +1399,12 @@ public:
1100
1399
  return compare_exchange_strong_impl(expected, desired, success_order, failure_order, cxchg_use_bitwise_cast());
1101
1400
  }
1102
1401
 
1103
- BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1402
+ BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const noexcept
1104
1403
  {
1105
1404
  return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order));
1106
1405
  }
1107
1406
 
1108
- BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const BOOST_NOEXCEPT
1407
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) const noexcept
1109
1408
  {
1110
1409
  BOOST_ASSERT(failure_order != memory_order_release);
1111
1410
  BOOST_ASSERT(failure_order != memory_order_acq_rel);
@@ -1114,74 +1413,74 @@ public:
1114
1413
  return compare_exchange_weak_impl(expected, desired, success_order, failure_order, cxchg_use_bitwise_cast());
1115
1414
  }
1116
1415
 
1117
- BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1416
+ BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) const noexcept
1118
1417
  {
1119
1418
  return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order));
1120
1419
  }
1121
1420
 
1122
1421
  // Boost.Atomic extensions
1123
- BOOST_FORCEINLINE value_type add(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1422
+ BOOST_FORCEINLINE value_type add(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
1124
1423
  {
1125
1424
  return atomics::detail::bitwise_cast< value_type >(extra_operations::add(this->storage(), static_cast< storage_type >(v * sizeof(T)), order));
1126
1425
  }
1127
1426
 
1128
- BOOST_FORCEINLINE value_type sub(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1427
+ BOOST_FORCEINLINE value_type sub(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
1129
1428
  {
1130
1429
  return atomics::detail::bitwise_cast< value_type >(extra_operations::sub(this->storage(), static_cast< storage_type >(v * sizeof(T)), order));
1131
1430
  }
1132
1431
 
1133
- BOOST_FORCEINLINE void opaque_add(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1432
+ BOOST_FORCEINLINE void opaque_add(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
1134
1433
  {
1135
1434
  extra_operations::opaque_add(this->storage(), static_cast< storage_type >(v * sizeof(T)), order);
1136
1435
  }
1137
1436
 
1138
- BOOST_FORCEINLINE void opaque_sub(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1437
+ BOOST_FORCEINLINE void opaque_sub(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
1139
1438
  {
1140
1439
  extra_operations::opaque_sub(this->storage(), static_cast< storage_type >(v * sizeof(T)), order);
1141
1440
  }
1142
1441
 
1143
- BOOST_FORCEINLINE bool add_and_test(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1442
+ BOOST_FORCEINLINE bool add_and_test(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
1144
1443
  {
1145
1444
  return extra_operations::add_and_test(this->storage(), static_cast< storage_type >(v * sizeof(T)), order);
1146
1445
  }
1147
1446
 
1148
- BOOST_FORCEINLINE bool sub_and_test(difference_type v, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1447
+ BOOST_FORCEINLINE bool sub_and_test(difference_type v, memory_order order = memory_order_seq_cst) const noexcept
1149
1448
  {
1150
1449
  return extra_operations::sub_and_test(this->storage(), static_cast< storage_type >(v * sizeof(T)), order);
1151
1450
  }
1152
1451
 
1153
1452
  // Operators
1154
- BOOST_FORCEINLINE value_type operator++(int) const BOOST_NOEXCEPT
1453
+ BOOST_FORCEINLINE value_type operator++(int) const noexcept
1155
1454
  {
1156
1455
  return fetch_add(1);
1157
1456
  }
1158
1457
 
1159
- BOOST_FORCEINLINE value_type operator++() const BOOST_NOEXCEPT
1458
+ BOOST_FORCEINLINE value_type operator++() const noexcept
1160
1459
  {
1161
1460
  return add(1);
1162
1461
  }
1163
1462
 
1164
- BOOST_FORCEINLINE value_type operator--(int) const BOOST_NOEXCEPT
1463
+ BOOST_FORCEINLINE value_type operator--(int) const noexcept
1165
1464
  {
1166
1465
  return fetch_sub(1);
1167
1466
  }
1168
1467
 
1169
- BOOST_FORCEINLINE value_type operator--() const BOOST_NOEXCEPT
1468
+ BOOST_FORCEINLINE value_type operator--() const noexcept
1170
1469
  {
1171
1470
  return sub(1);
1172
1471
  }
1173
1472
 
1174
- BOOST_FORCEINLINE value_type operator+=(difference_type v) const BOOST_NOEXCEPT
1473
+ BOOST_FORCEINLINE value_type operator+=(difference_type v) const noexcept
1175
1474
  {
1176
1475
  return add(v);
1177
1476
  }
1178
1477
 
1179
- BOOST_FORCEINLINE value_type operator-=(difference_type v) const BOOST_NOEXCEPT
1478
+ BOOST_FORCEINLINE value_type operator-=(difference_type v) const noexcept
1180
1479
  {
1181
1480
  return sub(v);
1182
1481
  }
1183
1482
 
1184
- BOOST_FORCEINLINE value_type wait(value_arg_type old_val, memory_order order = memory_order_seq_cst) const BOOST_NOEXCEPT
1483
+ BOOST_FORCEINLINE value_type wait(value_arg_type old_val, memory_order order = memory_order_seq_cst) const noexcept
1185
1484
  {
1186
1485
  BOOST_ASSERT(order != memory_order_release);
1187
1486
  BOOST_ASSERT(order != memory_order_acq_rel);
@@ -1189,31 +1488,65 @@ public:
1189
1488
  return atomics::detail::bitwise_cast< value_type >(wait_operations::wait(this->storage(), atomics::detail::bitwise_cast< storage_type >(old_val), order));
1190
1489
  }
1191
1490
 
1192
- BOOST_DELETED_FUNCTION(base_atomic_ref& operator=(base_atomic_ref const&))
1491
+ template< typename Clock, typename Duration >
1492
+ BOOST_FORCEINLINE wait_result< value_type >
1493
+ wait_until(value_arg_type old_val, std::chrono::time_point< Clock, Duration > timeout, memory_order order = memory_order_seq_cst) const
1494
+ noexcept(noexcept(wait_operations::wait_until(
1495
+ std::declval< storage_type const volatile& >(), std::declval< storage_type >(), timeout, order, std::declval< bool& >())))
1496
+ {
1497
+ BOOST_ASSERT(order != memory_order_release);
1498
+ BOOST_ASSERT(order != memory_order_acq_rel);
1499
+
1500
+ bool timed_out = false;
1501
+ storage_type new_value = wait_operations::wait_until(this->storage(), atomics::detail::bitwise_cast< storage_type >(old_val), timeout, order, timed_out);
1502
+ return wait_result< value_type >(atomics::detail::bitwise_cast< value_type >(new_value), timed_out);
1503
+ }
1504
+
1505
+ template< typename Rep, typename Period >
1506
+ BOOST_FORCEINLINE wait_result< value_type >
1507
+ wait_for(value_arg_type old_val, std::chrono::duration< Rep, Period > timeout, memory_order order = memory_order_seq_cst) const
1508
+ noexcept(noexcept(wait_operations::wait_for(
1509
+ std::declval< storage_type const volatile& >(), std::declval< storage_type >(), timeout, order, std::declval< bool& >())))
1510
+ {
1511
+ BOOST_ASSERT(order != memory_order_release);
1512
+ BOOST_ASSERT(order != memory_order_acq_rel);
1513
+
1514
+ bool timed_out = false;
1515
+ storage_type new_value = wait_operations::wait_for(this->storage(), atomics::detail::bitwise_cast< storage_type >(old_val), timeout, order, timed_out);
1516
+ return wait_result< value_type >(atomics::detail::bitwise_cast< value_type >(new_value), timed_out);
1517
+ }
1193
1518
 
1194
1519
  private:
1195
- BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) const BOOST_NOEXCEPT
1520
+ BOOST_FORCEINLINE bool
1521
+ compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::false_type) const noexcept
1196
1522
  {
1197
- return core_operations::compare_exchange_strong(this->storage(), reinterpret_cast< storage_type& >(expected), atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
1523
+ return core_operations::compare_exchange_strong(
1524
+ this->storage(), reinterpret_cast< storage_type& >(expected), atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
1198
1525
  }
1199
1526
 
1200
- BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) const BOOST_NOEXCEPT
1527
+ BOOST_FORCEINLINE bool
1528
+ compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::true_type) const noexcept
1201
1529
  {
1202
1530
  storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected);
1203
- const bool res = core_operations::compare_exchange_strong(this->storage(), old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
1531
+ const bool res = core_operations::compare_exchange_strong(
1532
+ this->storage(), old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
1204
1533
  expected = atomics::detail::bitwise_cast< value_type >(old_value);
1205
1534
  return res;
1206
1535
  }
1207
1536
 
1208
- BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) const BOOST_NOEXCEPT
1537
+ BOOST_FORCEINLINE bool
1538
+ compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::false_type) const noexcept
1209
1539
  {
1210
- return core_operations::compare_exchange_weak(this->storage(), reinterpret_cast< storage_type& >(expected), atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
1540
+ return core_operations::compare_exchange_weak(
1541
+ this->storage(), reinterpret_cast< storage_type& >(expected), atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
1211
1542
  }
1212
1543
 
1213
- BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) const BOOST_NOEXCEPT
1544
+ BOOST_FORCEINLINE bool
1545
+ compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, std::true_type) const noexcept
1214
1546
  {
1215
1547
  storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected);
1216
- const bool res = core_operations::compare_exchange_weak(this->storage(), old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
1548
+ const bool res = core_operations::compare_exchange_weak(
1549
+ this->storage(), old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
1217
1550
  expected = atomics::detail::bitwise_cast< value_type >(old_value);
1218
1551
  return res;
1219
1552
  }