passenger 6.0.23 → 6.0.24

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.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

Files changed (305) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +26 -1
  3. data/Rakefile +7 -3
  4. data/bin/passenger-install-apache2-module +5 -0
  5. data/bin/passenger-install-nginx-module +17 -2
  6. data/build/apache2.rb +1 -1
  7. data/build/basics.rb +10 -4
  8. data/build/cxx_tests.rb +18 -7
  9. data/build/support/cxx_dependency_map.rb +40 -6
  10. data/build/test_basics.rb +4 -12
  11. data/package.json +1 -1
  12. data/passenger.gemspec +1 -1
  13. data/src/agent/Core/ApplicationPool/Group/InitializationAndShutdown.cpp +8 -0
  14. data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +10 -2
  15. data/src/agent/Core/ApplicationPool/Group/LifetimeAndBasics.cpp +8 -0
  16. data/src/agent/Core/ApplicationPool/Group/Miscellaneous.cpp +9 -0
  17. data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +9 -0
  18. data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +63 -50
  19. data/src/agent/Core/ApplicationPool/Group/SessionManagement.cpp +19 -9
  20. data/src/agent/Core/ApplicationPool/Group/SpawningAndRestarting.cpp +8 -0
  21. data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +8 -0
  22. data/src/agent/Core/ApplicationPool/Group/Verification.cpp +8 -0
  23. data/src/agent/Core/ApplicationPool/Group.h +15 -5
  24. data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +5 -0
  25. data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +5 -0
  26. data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +5 -0
  27. data/src/agent/Core/ApplicationPool/Pool/GroupUtils.cpp +5 -0
  28. data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +5 -0
  29. data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +5 -0
  30. data/src/agent/Core/ApplicationPool/Pool/ProcessUtils.cpp +5 -0
  31. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +11 -1
  32. data/src/agent/Core/ApplicationPool/Pool.h +0 -2
  33. data/src/agent/Core/ApplicationPool/Process.h +22 -6
  34. data/src/agent/Core/ApplicationPool/Session.h +6 -1
  35. data/src/agent/Core/Config.h +7 -3
  36. data/src/agent/Core/Controller/Config.h +1 -1
  37. data/src/agent/Core/CoreMain.cpp +10 -17
  38. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +1 -53
  39. data/src/agent/Core/SpawningKit/Handshake/Session.h +3 -0
  40. data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +5 -2
  41. data/src/agent/Core/SpawningKit/SmartSpawner.h +6 -2
  42. data/src/agent/Core/SpawningKit/Spawner.h +4 -0
  43. data/src/agent/Shared/Fundamentals/AbortHandler.cpp +88 -9
  44. data/src/agent/Shared/Fundamentals/AbortHandler.h +2 -0
  45. data/src/agent/Shared/Fundamentals/Initialization.cpp +9 -3
  46. data/src/agent/Shared/Fundamentals/Initialization.h +3 -3
  47. data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +6 -7
  48. data/src/agent/Watchdog/Config.h +1 -1
  49. data/src/agent/Watchdog/WatchdogMain.cpp +4 -7
  50. data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +5 -3
  51. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +3 -0
  52. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +3 -0
  53. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +2 -1
  54. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder +2 -1
  55. data/src/cxx_supportlib/Constants.h +1 -1
  56. data/src/cxx_supportlib/DataStructures/StringMap.h +0 -1
  57. data/src/cxx_supportlib/FileTools/PathManip.cpp +1 -1
  58. data/src/cxx_supportlib/SafeLibev.h +1 -3
  59. data/src/cxx_supportlib/ServerKit/Hooks.h +2 -2
  60. data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +0 -1
  61. data/src/cxx_supportlib/ServerKit/HttpServer.h +15 -10
  62. data/src/cxx_supportlib/ServerKit/Server.h +0 -6
  63. data/src/cxx_supportlib/Utils/AsyncSignalSafeUtils.h +2 -0
  64. data/src/cxx_supportlib/Utils/SpeedMeter.h +0 -3
  65. data/src/cxx_supportlib/oxt/implementation.cpp +11 -0
  66. data/src/cxx_supportlib/oxt/system_calls.cpp +10 -3
  67. data/src/cxx_supportlib/oxt/thread.hpp +1 -1
  68. data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +35 -9
  69. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_immediate_executor.hpp +3 -2
  70. data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +1 -1
  71. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +74 -68
  72. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +11 -11
  73. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +2 -2
  74. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +2 -2
  75. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +10 -10
  76. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +1 -1
  77. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +3 -3
  78. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +2 -2
  79. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +1 -1
  80. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +2 -2
  81. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +9 -9
  82. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +2 -2
  83. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +6 -6
  84. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +2 -2
  85. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +1 -1
  86. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +88 -22
  87. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +91 -22
  88. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +105 -23
  89. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_immediate_executor.hpp +90 -23
  90. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +2 -2
  91. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +1 -1
  92. data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_after.hpp +303 -0
  93. data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_at.hpp +296 -0
  94. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/impl/co_composed.hpp → co_composed.hpp} +208 -61
  95. data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +49 -0
  96. data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +10 -201
  97. data/src/cxx_supportlib/vendor-modified/boost/asio/composed.hpp +415 -0
  98. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +214 -48
  99. data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +3 -4
  100. data/src/cxx_supportlib/vendor-modified/boost/asio/default_completion_token.hpp +91 -0
  101. data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +9 -5
  102. data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +2 -2
  103. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
  104. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_message.hpp → detail/completion_message.hpp} +14 -16
  105. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_payload.hpp → detail/completion_payload.hpp} +30 -32
  106. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_handler.hpp → detail/completion_payload_handler.hpp} +15 -13
  107. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +26 -32
  108. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +5 -1
  109. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +14 -118
  110. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +36 -33
  111. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +1 -1
  112. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +7 -5
  113. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +6 -4
  114. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +44 -35
  115. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +1 -1
  116. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiation_base.hpp +64 -0
  117. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +0 -11
  118. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +20 -16
  119. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +0 -1
  120. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +4 -4
  121. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +23 -18
  122. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +9 -0
  123. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +1 -1
  124. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +1 -1
  125. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +11 -1
  126. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timed_cancel_op.hpp +363 -0
  127. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +29 -51
  128. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +1 -1
  129. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +1 -1
  130. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +1 -1
  131. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +1 -1
  132. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +1 -1
  133. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +1 -1
  134. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +1 -1
  135. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +1 -1
  136. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +2 -1
  137. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +2 -1
  138. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +2 -114
  139. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +2 -3
  140. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +27 -19
  141. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +0 -1
  142. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +17 -15
  143. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +2 -3
  144. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +4 -2
  145. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +3 -5
  146. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +12 -7
  147. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +1 -1
  148. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +38 -40
  149. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +3 -3
  150. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +5 -5
  151. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +1 -1
  152. data/src/cxx_supportlib/vendor-modified/boost/asio/immediate.hpp +144 -0
  153. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +14 -7
  154. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +45 -14
  155. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +3 -3
  156. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_after.hpp +270 -0
  157. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_at.hpp +270 -0
  158. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +8 -0
  159. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +60 -166
  160. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +14 -7
  161. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +2 -2
  162. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +14 -7
  163. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +26 -177
  164. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +16 -82
  165. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +13 -286
  166. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +55 -18
  167. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +1 -1
  168. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +26 -185
  169. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +16 -87
  170. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +5 -5
  171. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +6 -6
  172. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
  173. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +1 -1
  174. data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +12 -6
  175. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +1 -1
  176. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +2 -2
  177. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +127 -28
  178. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +70 -20
  179. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +114 -36
  180. data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +43 -3
  181. data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +2 -2
  182. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +0 -1
  183. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +2 -2
  184. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +10 -7
  185. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +5 -5
  186. data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +2 -2
  187. data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +2 -2
  188. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +1 -1
  189. data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +1 -1
  190. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
  191. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +147 -35
  192. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +74 -22
  193. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +6 -0
  194. data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +4 -1
  195. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +42 -11
  196. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +15 -37
  197. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +8 -8
  198. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
  199. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +151 -10
  200. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +11 -9
  201. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +611 -102
  202. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +1 -1
  203. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +47 -47
  204. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +25 -24
  205. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocation_type.hpp +7 -7
  206. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_list.hpp +2 -2
  207. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_slist.hpp +2 -2
  208. data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +35 -1
  209. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +14 -14
  210. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +1 -1
  211. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +55 -23
  212. data/src/cxx_supportlib/vendor-modified/boost/container/detail/function_detector.hpp +1 -1
  213. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +2 -2
  214. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +1 -1
  215. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_pair.hpp +4 -4
  216. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +8 -8
  217. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +9 -9
  218. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +4 -4
  219. data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +96 -10
  220. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +19 -4
  221. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +1 -1
  222. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +17 -17
  223. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +1 -1
  224. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +2 -2
  225. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +4 -4
  226. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +86 -52
  227. data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +4 -4
  228. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +12 -0
  229. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +145 -65
  230. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +105 -22
  231. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +2 -2
  232. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +30 -22
  233. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +19 -2
  234. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +1 -1
  235. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +15 -8
  236. data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +6 -5
  237. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +15 -15
  238. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +1 -1
  239. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +1 -1
  240. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +3 -3
  241. data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +1 -1
  242. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +2 -2
  243. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +31 -24
  244. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +45 -43
  245. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +45 -33
  246. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +5 -7
  247. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +55 -47
  248. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +3 -3
  249. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +222 -73
  250. data/src/cxx_supportlib/vendor-modified/boost/core/detail/minstd_rand.hpp +58 -0
  251. data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +13 -13
  252. data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +53 -5
  253. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +1 -0
  254. data/src/cxx_supportlib/vendor-modified/boost/core/pointer_in_range.hpp +49 -0
  255. data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +2 -0
  256. data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +7 -2
  257. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +22 -34
  258. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +141 -38
  259. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algorithm.hpp +8 -8
  260. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +1 -1
  261. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +8 -6
  262. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +18 -18
  263. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +22 -17
  264. data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +3 -1
  265. data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +0 -1
  266. data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +53 -0
  267. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +9 -1
  268. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +6 -1
  269. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
  270. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/integral_wrapper.hpp +2 -1
  271. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  272. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/requires_cxx11.hpp +1 -1
  273. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +4 -1
  274. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +13 -1
  275. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +13 -1
  276. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +15 -0
  277. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +13 -1
  278. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +15 -0
  279. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +22 -6
  280. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +38 -10
  281. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +111 -2
  282. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/cumulative_stats.hpp +177 -0
  283. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +11 -1
  284. data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +33 -7
  285. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +12 -0
  286. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +15 -0
  287. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +12 -0
  288. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +14 -0
  289. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +19 -0
  290. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +12 -0
  291. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +15 -0
  292. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +12 -0
  293. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +14 -0
  294. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +17 -0
  295. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +1 -43
  296. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  297. data/src/ruby_supportlib/phusion_passenger/config/compile_nginx_engine_command.rb +6 -2
  298. data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +10 -0
  299. data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +12 -4
  300. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +32 -5
  301. data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +0 -4
  302. data/src/ruby_supportlib/phusion_passenger/utils/json.rb +5 -1
  303. data/src/ruby_supportlib/phusion_passenger/utils.rb +5 -15
  304. data/src/ruby_supportlib/phusion_passenger.rb +5 -5
  305. metadata +21 -8
@@ -54,7 +54,7 @@
54
54
  #include <boost/move/utility_core.hpp>
55
55
  #include <boost/move/iterator.hpp>
56
56
  #include <boost/move/adl_move_swap.hpp>
57
- #include <boost/move/detail/force_ptr.hpp>
57
+ #include <boost/move/detail/launder.hpp>
58
58
  // move/detail
59
59
  #include <boost/move/detail/move_helpers.hpp>
60
60
  #include <boost/move/detail/iterator_to_raw_pointer.hpp>
@@ -166,19 +166,19 @@ struct node
166
166
  # endif
167
167
 
168
168
  inline T &get_data()
169
- { return *boost::move_detail::force_ptr<T*>(this->m_storage.data); }
169
+ { return *boost::move_detail::launder_cast<T*>(&this->m_storage); }
170
170
 
171
171
  inline const T &get_data() const
172
- { return *boost::move_detail::force_ptr<const T*>(this->m_storage.data); }
172
+ { return *boost::move_detail::launder_cast<const T*>(&this->m_storage); }
173
173
 
174
174
  inline T *get_data_ptr()
175
- { return boost::move_detail::force_ptr<T*>(this->m_storage.data); }
175
+ { return boost::move_detail::launder_cast<T*>(&this->m_storage); }
176
176
 
177
177
  inline const T *get_data_ptr() const
178
- { return boost::move_detail::force_ptr<const T*>(this->m_storage.data); }
178
+ { return boost::move_detail::launder_cast<const T*>(&this->m_storage); }
179
179
 
180
180
  inline ~node()
181
- { boost::move_detail::force_ptr<T*>(this->m_storage.data)->~T(); }
181
+ { boost::move_detail::launder_cast<T*>(&this->m_storage)->~T(); }
182
182
 
183
183
  #if defined(BOOST_CONTAINER_DISABLE_ALIASING_WARNING)
184
184
  #pragma GCC diagnostic pop
@@ -214,7 +214,7 @@ struct index_traits
214
214
  typedef typename index_type::const_iterator const_index_iterator;
215
215
  typedef typename index_type::size_type size_type;
216
216
 
217
- static const size_type ExtraPointers = 3;
217
+ BOOST_STATIC_CONSTEXPR size_type ExtraPointers = 3;
218
218
  //Stable vector stores metadata at the end of the index (node_base_ptr vector) with additional 3 pointers:
219
219
  // back() is this->index.back() - ExtraPointers;
220
220
  // end node index is *(this->index.end() - 3)
@@ -598,7 +598,7 @@ class stable_vector
598
598
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
599
599
  private:
600
600
  BOOST_COPYABLE_AND_MOVABLE(stable_vector)
601
- static const size_type ExtraPointers = index_traits_type::ExtraPointers;
601
+ BOOST_STATIC_CONSTEXPR size_type ExtraPointers = index_traits_type::ExtraPointers;
602
602
 
603
603
  class insert_rollback;
604
604
  friend class insert_rollback;
@@ -872,31 +872,14 @@ class stable_vector
872
872
  BOOST_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value
873
873
  || allocator_traits_type::is_always_equal::value)
874
874
  {
875
- //for move constructor, no aliasing (&x != this) is assumed.
876
875
  if (BOOST_LIKELY(this != &x)) {
877
- node_allocator_type &this_alloc = this->priv_node_alloc();
878
- node_allocator_type &x_alloc = x.priv_node_alloc();
879
- const bool propagate_alloc = allocator_traits_type::
880
- propagate_on_container_move_assignment::value;
881
- dtl::bool_<propagate_alloc> flag;
882
- const bool allocators_equal = this_alloc == x_alloc; (void)allocators_equal;
883
- //Resources can be transferred if both allocators are
884
- //going to be equal after this function (either propagated or already equal)
885
- if(propagate_alloc || allocators_equal){
886
- BOOST_CONTAINER_STABLE_VECTOR_CHECK_INVARIANT
887
- //Destroy objects but retain memory in case x reuses it in the future
888
- this->clear();
889
- //Move allocator if needed
890
- dtl::move_alloc(this_alloc, x_alloc, flag);
891
- //Take resources
892
- this->index.swap(x.index);
893
- this->priv_swap_members(x);
894
- }
895
- //Else do a one by one move
896
- else{
897
- this->assign( boost::make_move_iterator(x.begin())
898
- , boost::make_move_iterator(x.end()));
899
- }
876
+ //We know resources can be transferred at comiple time if both allocators are
877
+ //always equal or the allocator is going to be propagated
878
+ const bool can_steal_resources_alloc
879
+ = allocator_traits_type::propagate_on_container_move_assignment::value
880
+ || allocator_traits_type::is_always_equal::value;
881
+ dtl::bool_<can_steal_resources_alloc> flag;
882
+ this->priv_move_assign(boost::move(x), flag);
900
883
  }
901
884
  return *this;
902
885
  }
@@ -1852,6 +1835,35 @@ class stable_vector
1852
1835
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
1853
1836
  private:
1854
1837
 
1838
+ void priv_move_assign(BOOST_RV_REF(stable_vector) x, dtl::bool_<true> /*steal_resources*/)
1839
+ {
1840
+ //Resources can be transferred if both allocators are
1841
+ //going to be equal after this function (either propagated or already equal)
1842
+ BOOST_CONTAINER_STABLE_VECTOR_CHECK_INVARIANT
1843
+ //Destroy objects but retain memory in case x reuses it in the future
1844
+ this->clear();
1845
+ //Move allocator if needed
1846
+ dtl::bool_<allocator_traits_type::
1847
+ propagate_on_container_move_assignment::value> flag;
1848
+ dtl::move_alloc(this->priv_node_alloc(), x.priv_node_alloc(), flag);
1849
+
1850
+ //Take resources
1851
+ this->index = boost::move(x.index); //this also moves the vector's allocator if needed
1852
+ this->priv_swap_members(x);
1853
+ }
1854
+
1855
+ void priv_move_assign(BOOST_RV_REF(stable_vector) x, dtl::bool_<false> /*steal_resources*/)
1856
+ {
1857
+ //We can't guarantee a compile-time equal allocator or propagation so fallback to runtime
1858
+ //Resources can be transferred if both allocators are equal
1859
+ if (this->priv_node_alloc() == x.priv_node_alloc()) {
1860
+ this->priv_move_assign(boost::move(x), dtl::true_());
1861
+ }
1862
+ else {
1863
+ this->assign(boost::make_move_iterator(x.begin()), boost::make_move_iterator(x.end()));
1864
+ }
1865
+ }
1866
+
1855
1867
  bool priv_in_range(const_iterator pos) const
1856
1868
  {
1857
1869
  return (this->begin() <= pos) && (pos < this->end());
@@ -2243,7 +2255,7 @@ struct has_trivial_destructor_after_move<boost::container::stable_vector<T, Allo
2243
2255
  {
2244
2256
  typedef typename boost::container::stable_vector<T, Allocator>::allocator_type allocator_type;
2245
2257
  typedef typename ::boost::container::allocator_traits<allocator_type>::pointer pointer;
2246
- static const bool value = ::boost::has_trivial_destructor_after_move<allocator_type>::value &&
2258
+ BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<allocator_type>::value &&
2247
2259
  ::boost::has_trivial_destructor_after_move<pointer>::value;
2248
2260
  };
2249
2261
 
@@ -22,6 +22,7 @@
22
22
  #include <boost/container/detail/config_begin.hpp>
23
23
  #include <boost/container/detail/workaround.hpp>
24
24
  #include <boost/container/detail/type_traits.hpp>
25
+ #include <boost/move/detail/launder.hpp>
25
26
  #include <boost/container/vector.hpp>
26
27
 
27
28
  #include <cstddef>
@@ -63,12 +64,9 @@ class static_storage_allocator
63
64
  { return *this; }
64
65
 
65
66
  inline T* internal_storage() const BOOST_NOEXCEPT_OR_NOTHROW
66
- { return const_cast<T*>(static_cast<const T*>(static_cast<const void*>(storage.data))); }
67
+ { return move_detail::launder_cast<T*>(&storage); }
67
68
 
68
- inline T* internal_storage() BOOST_NOEXCEPT_OR_NOTHROW
69
- { return static_cast<T*>(static_cast<void*>(storage.data)); }
70
-
71
- static const std::size_t internal_capacity = N;
69
+ BOOST_STATIC_CONSTEXPR std::size_t internal_capacity = N;
72
70
 
73
71
  std::size_t max_size() const
74
72
  { return N; }
@@ -88,7 +86,7 @@ class static_storage_allocator
88
86
 
89
87
  private:
90
88
  BOOST_CONTAINER_STATIC_ASSERT_MSG(!InplaceAlignment || (InplaceAlignment & (InplaceAlignment-1)) == 0, "Alignment option must be zero or power of two");
91
- static const std::size_t final_alignment = InplaceAlignment ? InplaceAlignment : dtl::alignment_of<T>::value;
89
+ BOOST_STATIC_CONSTEXPR std::size_t final_alignment = InplaceAlignment ? InplaceAlignment : dtl::alignment_of<T>::value;
92
90
  typename dtl::aligned_storage<sizeof(T)*N, final_alignment>::type storage;
93
91
  };
94
92
 
@@ -190,7 +188,7 @@ public:
190
188
  typedef typename base_t::const_reverse_iterator const_reverse_iterator;
191
189
 
192
190
  //! @brief The capacity/max size of the container
193
- static const size_type static_capacity = Capacity;
191
+ BOOST_STATIC_CONSTEXPR size_type static_capacity = Capacity;
194
192
 
195
193
  //! @brief Constructs an empty static_vector.
196
194
  //!
@@ -43,7 +43,7 @@
43
43
  //intrusive
44
44
  #include <boost/intrusive/pointer_traits.hpp>
45
45
  #include <boost/intrusive/detail/hash_combine.hpp>
46
- #include <boost/move/detail/force_ptr.hpp>
46
+ #include <boost/move/detail/launder.hpp>
47
47
  //move
48
48
  #include <boost/move/utility_core.hpp>
49
49
  #include <boost/move/adl_move_swap.hpp>
@@ -192,13 +192,13 @@ class basic_string_base
192
192
  <sizeof(long_t), dtl::alignment_of<long_t>::value>::type long_raw_t;
193
193
 
194
194
  protected:
195
- static const size_type MinInternalBufferChars = 8;
196
- static const size_type AlignmentOfValueType =
195
+ BOOST_STATIC_CONSTEXPR size_type MinInternalBufferChars = 8;
196
+ BOOST_STATIC_CONSTEXPR size_type AlignmentOfValueType =
197
197
  alignment_of<value_type>::value;
198
- static const size_type ShortDataOffset = ((sizeof(short_header)-1)/AlignmentOfValueType+1)*AlignmentOfValueType;
199
- static const size_type ZeroCostInternalBufferChars =
198
+ BOOST_STATIC_CONSTEXPR size_type ShortDataOffset = ((sizeof(short_header)-1)/AlignmentOfValueType+1)*AlignmentOfValueType;
199
+ BOOST_STATIC_CONSTEXPR size_type ZeroCostInternalBufferChars =
200
200
  (sizeof(long_t) - ShortDataOffset)/sizeof(value_type);
201
- static const size_type UnalignedFinalInternalBufferChars =
201
+ BOOST_STATIC_CONSTEXPR size_type UnalignedFinalInternalBufferChars =
202
202
  (ZeroCostInternalBufferChars > MinInternalBufferChars) ?
203
203
  ZeroCostInternalBufferChars : MinInternalBufferChars;
204
204
 
@@ -226,7 +226,7 @@ class basic_string_base
226
226
  {
227
227
  inline void init()
228
228
  {
229
- short_t &s = *::new(this->m_repr.data) short_t;
229
+ short_t &s = *::new(&this->m_repr) short_t;
230
230
  s.h.is_short = 1;
231
231
  s.h.length = 0;
232
232
  }
@@ -241,16 +241,16 @@ class basic_string_base
241
241
  { this->init(); }
242
242
 
243
243
  inline const short_t *pshort_repr() const
244
- { return move_detail::force_ptr<const short_t*>(m_repr.data); }
244
+ { return move_detail::launder_cast<const short_t*>(&m_repr); }
245
245
 
246
246
  inline const long_t *plong_repr() const
247
- { return move_detail::force_ptr<const long_t*>(m_repr.data); }
247
+ { return move_detail::launder_cast<const long_t*>(&m_repr); }
248
248
 
249
249
  inline short_t *pshort_repr()
250
- { return move_detail::force_ptr<short_t*>(m_repr.data); }
250
+ { return move_detail::launder_cast<short_t*>(&m_repr); }
251
251
 
252
252
  inline long_t *plong_repr()
253
- { return move_detail::force_ptr<long_t*>(m_repr.data); }
253
+ { return move_detail::launder_cast<long_t*>(&m_repr); }
254
254
 
255
255
  repr_t m_repr;
256
256
  } members_;
@@ -261,11 +261,11 @@ class basic_string_base
261
261
  inline allocator_type &alloc()
262
262
  { return members_; }
263
263
 
264
- static const size_type InternalBufferChars = (sizeof(repr_t) - ShortDataOffset)/sizeof(value_type);
264
+ BOOST_STATIC_CONSTEXPR size_type InternalBufferChars = (sizeof(repr_t) - ShortDataOffset)/sizeof(value_type);
265
265
 
266
266
  private:
267
267
 
268
- static const size_type MinAllocation = InternalBufferChars*2;
268
+ BOOST_STATIC_CONSTEXPR size_type MinAllocation = InternalBufferChars*2;
269
269
 
270
270
  protected:
271
271
  inline bool is_short() const
@@ -280,7 +280,7 @@ class basic_string_base
280
280
 
281
281
  inline short_t *construct_short()
282
282
  {
283
- short_t *ps = ::new(this->members_.m_repr.data) short_t;
283
+ short_t *ps = ::new(&this->members_.m_repr) short_t;
284
284
  ps->h.is_short = 1;
285
285
  return ps;
286
286
  }
@@ -302,7 +302,7 @@ class basic_string_base
302
302
 
303
303
  inline long_t *construct_long()
304
304
  {
305
- long_t *pl = ::new(this->members_.m_repr.data) long_t;
305
+ long_t *pl = ::new(&this->members_.m_repr) long_t;
306
306
  //is_short flag is written in the constructor
307
307
  return pl;
308
308
  }
@@ -469,7 +469,7 @@ class basic_string_base
469
469
  inline void priv_short_size(size_type sz)
470
470
  {
471
471
  typedef unsigned char uchar_type;
472
- static const uchar_type mask = uchar_type(uchar_type(-1) >> 1U);
472
+ BOOST_STATIC_CONSTEXPR uchar_type mask = uchar_type(uchar_type(-1) >> 1U);
473
473
  BOOST_ASSERT( sz <= mask );
474
474
  //Make -Wconversion happy
475
475
  this->members_.pshort_repr()->h.length = uchar_type(uchar_type(sz) & mask);
@@ -477,7 +477,7 @@ class basic_string_base
477
477
 
478
478
  inline void priv_long_size(size_type sz)
479
479
  {
480
- static const size_type mask = size_type(-1) >> 1U;
480
+ BOOST_STATIC_CONSTEXPR size_type mask = size_type(-1) >> 1U;
481
481
  BOOST_ASSERT( sz <= mask );
482
482
  //Make -Wconversion happy
483
483
  this->members_.plong_repr()->length = sz & mask;
@@ -566,7 +566,7 @@ class basic_string
566
566
  BOOST_COPYABLE_AND_MOVABLE(basic_string)
567
567
  typedef dtl::basic_string_base<typename real_allocator<CharT, Allocator>::type> base_t;
568
568
  typedef typename base_t::allocator_traits_type allocator_traits_type;
569
- static const typename base_t::size_type InternalBufferChars = base_t::InternalBufferChars;
569
+ BOOST_STATIC_CONSTEXPR typename base_t::size_type InternalBufferChars = base_t::InternalBufferChars;
570
570
 
571
571
  protected:
572
572
  // Allocator helper class to use a char_traits as a function object.
@@ -624,7 +624,7 @@ class basic_string
624
624
  typedef BOOST_CONTAINER_IMPDEF(const_pointer) const_iterator;
625
625
  typedef BOOST_CONTAINER_IMPDEF(boost::container::reverse_iterator<iterator>) reverse_iterator;
626
626
  typedef BOOST_CONTAINER_IMPDEF(boost::container::reverse_iterator<const_iterator>) const_reverse_iterator;
627
- static const size_type npos = size_type(-1);
627
+ BOOST_STATIC_CONSTEXPR size_type npos = size_type(-1);
628
628
 
629
629
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
630
630
  private:
@@ -913,26 +913,13 @@ class basic_string
913
913
  || allocator_traits_type::is_always_equal::value)
914
914
  {
915
915
  if (BOOST_LIKELY(this != &x)) {
916
- allocator_type &this_alloc = this->alloc();
917
- allocator_type &x_alloc = x.alloc();
918
- const bool propagate_alloc = allocator_traits_type::
919
- propagate_on_container_move_assignment::value;
920
- dtl::bool_<propagate_alloc> flag;
921
- const bool allocators_equal = this_alloc == x_alloc; (void)allocators_equal;
922
- //Resources can be transferred if both allocators are
923
- //going to be equal after this function (either propagated or already equal)
924
- if(propagate_alloc || allocators_equal){
925
- //Destroy objects but retain memory in case x reuses it in the future
926
- this->clear();
927
- //Move allocator if needed
928
- dtl::move_alloc(this_alloc, x_alloc, flag);
929
- //Nothrow swap
930
- this->swap_data(x);
931
- }
932
- //Else do a one by one move
933
- else{
934
- this->assign( x.begin(), x.end());
935
- }
916
+ //We know resources can be transferred at comiple time if both allocators are
917
+ //always equal or the allocator is going to be propagated
918
+ const bool can_steal_resources_alloc
919
+ = allocator_traits_type::propagate_on_container_move_assignment::value
920
+ || allocator_traits_type::is_always_equal::value;
921
+ dtl::bool_<can_steal_resources_alloc> flag;
922
+ this->priv_move_assign(boost::move(x), flag);
936
923
  }
937
924
  return *this;
938
925
  }
@@ -2908,6 +2895,30 @@ class basic_string
2908
2895
 
2909
2896
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
2910
2897
  private:
2898
+ void priv_move_assign(BOOST_RV_REF(basic_string) x, dtl::bool_<true> /*steal_resources*/)
2899
+ {
2900
+ //Destroy objects but retain memory in case x reuses it in the future
2901
+ this->clear();
2902
+ //Move allocator if needed
2903
+ dtl::bool_<allocator_traits_type::
2904
+ propagate_on_container_move_assignment::value> flag;
2905
+ dtl::move_alloc(this->alloc(), x.alloc(), flag);
2906
+ //Nothrow swap
2907
+ this->swap_data(x);
2908
+ }
2909
+
2910
+ void priv_move_assign(BOOST_RV_REF(basic_string) x, dtl::bool_<false> /*steal_resources*/)
2911
+ {
2912
+ //We can't guarantee a compile-time equal allocator or propagation so fallback to runtime
2913
+ //Resources can be transferred if both allocators are equal
2914
+ if (this->alloc() == x.alloc()) {
2915
+ this->priv_move_assign(boost::move(x), dtl::true_());
2916
+ }
2917
+ else {
2918
+ this->assign(x.begin(), x.end());
2919
+ }
2920
+ }
2921
+
2911
2922
  bool priv_reserve_no_null_end(size_type res_arg)
2912
2923
  {
2913
2924
  if (res_arg > this->max_size()){
@@ -3074,20 +3085,16 @@ wstring;
3074
3085
 
3075
3086
  #else
3076
3087
 
3077
- template <class CharT, class Traits, class Allocator>
3078
- const typename basic_string<CharT,Traits,Allocator>::size_type
3079
- basic_string<CharT,Traits,Allocator>::npos;
3080
-
3081
3088
  template<class S>
3082
3089
  struct is_string
3083
3090
  {
3084
- static const bool value = false;
3091
+ BOOST_STATIC_CONSTEXPR bool value = false;
3085
3092
  };
3086
3093
 
3087
3094
  template<class C, class T, class A>
3088
3095
  struct is_string< basic_string<C, T, A> >
3089
3096
  {
3090
- static const bool value = true;
3097
+ BOOST_STATIC_CONSTEXPR bool value = true;
3091
3098
  };
3092
3099
 
3093
3100
  #endif
@@ -3572,8 +3579,9 @@ struct has_trivial_destructor_after_move<boost::container::basic_string<C, T, Al
3572
3579
  {
3573
3580
  typedef typename boost::container::basic_string<C, T, Allocator>::allocator_type allocator_type;
3574
3581
  typedef typename ::boost::container::allocator_traits<allocator_type>::pointer pointer;
3575
- static const bool value = ::boost::has_trivial_destructor_after_move<allocator_type>::value &&
3576
- ::boost::has_trivial_destructor_after_move<pointer>::value;
3582
+ BOOST_STATIC_CONSTEXPR bool value =
3583
+ ::boost::has_trivial_destructor_after_move<allocator_type>::value &&
3584
+ ::boost::has_trivial_destructor_after_move<pointer>::value;
3577
3585
  };
3578
3586
 
3579
3587
  }
@@ -58,7 +58,7 @@ namespace container {
58
58
  //! to detect if a type should be constructed with suffix or prefix allocator arguments.
59
59
  template <class T>
60
60
  struct constructible_with_allocator_suffix
61
- { static const bool value = false; };
61
+ { BOOST_STATIC_CONSTEXPR bool value = false; };
62
62
 
63
63
  //! <b>Remark</b>: if a specialization constructible_with_allocator_prefix<X>::value is true, indicates that T may be constructed
64
64
  //! with allocator_arg and T::allocator_type as its first two constructor arguments.
@@ -108,7 +108,7 @@ struct constructible_with_allocator_suffix
108
108
  //! to detect if a type should be constructed with suffix or prefix allocator arguments.
109
109
  template <class T>
110
110
  struct constructible_with_allocator_prefix
111
- { static const bool value = false; };
111
+ { BOOST_STATIC_CONSTEXPR bool value = false; };
112
112
 
113
113
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
114
114
 
@@ -142,7 +142,7 @@ struct uses_allocator_imp
142
142
  static Allocator alloc; // Declared but not defined
143
143
 
144
144
  public:
145
- static const bool value = sizeof(test<T>(alloc)) == sizeof(yes_type);
145
+ BOOST_STATIC_CONSTEXPR bool value = sizeof(test<T>(alloc)) == sizeof(yes_type);
146
146
  };
147
147
 
148
148
  } //namespace dtl {