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
@@ -29,7 +29,7 @@
29
29
  #include <boost/container/detail/type_traits.hpp>
30
30
  #include <boost/container/detail/mpl.hpp>
31
31
  #include <boost/container/detail/std_fwd.hpp>
32
- #include <boost/container/detail/is_pair.hpp>
32
+ #include <boost/container/detail/is_pair.hpp> //Forward declares boost::tuples::tuple
33
33
  #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
34
34
  # include <boost/container/detail/variadic_templates_tools.hpp>
35
35
  #endif
@@ -46,7 +46,7 @@ namespace pair_impl {
46
46
  template <class TupleClass>
47
47
  struct is_boost_tuple
48
48
  {
49
- static const bool value = false;
49
+ BOOST_STATIC_CONSTEXPR bool value = false;
50
50
  };
51
51
 
52
52
  template <
@@ -56,7 +56,7 @@ template <
56
56
  class T9>
57
57
  struct is_boost_tuple< boost::tuples::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
58
58
  {
59
- static const bool value = true;
59
+ BOOST_STATIC_CONSTEXPR bool value = true;
60
60
  };
61
61
 
62
62
  template<class Tuple>
@@ -67,13 +67,13 @@ struct disable_if_boost_tuple
67
67
  template<class T>
68
68
  struct is_tuple_null
69
69
  {
70
- static const bool value = false;
70
+ BOOST_STATIC_CONSTEXPR bool value = false;
71
71
  };
72
72
 
73
73
  template<>
74
74
  struct is_tuple_null<boost::tuples::null_type>
75
75
  {
76
- static const bool value = true;
76
+ BOOST_STATIC_CONSTEXPR bool value = true;
77
77
  };
78
78
 
79
79
  } //namespace detail {
@@ -482,7 +482,7 @@ inline void swap(pair<T1, T2>& x, pair<T1, T2>& y)
482
482
  template<class T1, class T2>
483
483
  struct has_move_emulation_enabled< ::boost::container::dtl::pair<T1, T2> >
484
484
  {
485
- static const bool value = true;
485
+ BOOST_STATIC_CONSTEXPR bool value = true;
486
486
  };
487
487
 
488
488
  #endif
@@ -497,7 +497,7 @@ struct is_class_or_union< ::boost::container::dtl::pair<T1, T2> >
497
497
  //This specialization is needed to avoid instantiation of pair in
498
498
  //is_class, and allow recursive maps.
499
499
  {
500
- static const bool value = true;
500
+ BOOST_STATIC_CONSTEXPR bool value = true;
501
501
  };
502
502
 
503
503
  template <class T1, class T2>
@@ -505,7 +505,7 @@ struct is_class_or_union< std::pair<T1, T2> >
505
505
  //This specialization is needed to avoid instantiation of pair in
506
506
  //is_class, and allow recursive maps.
507
507
  {
508
- static const bool value = true;
508
+ BOOST_STATIC_CONSTEXPR bool value = true;
509
509
  };
510
510
 
511
511
  template<class T>
@@ -516,7 +516,7 @@ struct is_union< ::boost::container::dtl::pair<T1, T2> >
516
516
  //This specialization is needed to avoid instantiation of pair in
517
517
  //is_class, and allow recursive maps.
518
518
  {
519
- static const bool value = false;
519
+ BOOST_STATIC_CONSTEXPR bool value = false;
520
520
  };
521
521
 
522
522
  template <class T1, class T2>
@@ -524,7 +524,7 @@ struct is_union< std::pair<T1, T2> >
524
524
  //This specialization is needed to avoid instantiation of pair in
525
525
  //is_class, and allow recursive maps.
526
526
  {
527
- static const bool value = false;
527
+ BOOST_STATIC_CONSTEXPR bool value = false;
528
528
  };
529
529
 
530
530
  template<class T>
@@ -535,7 +535,7 @@ struct is_class< ::boost::container::dtl::pair<T1, T2> >
535
535
  //This specialization is needed to avoid instantiation of pair in
536
536
  //is_class, and allow recursive maps.
537
537
  {
538
- static const bool value = true;
538
+ BOOST_STATIC_CONSTEXPR bool value = true;
539
539
  };
540
540
 
541
541
  template <class T1, class T2>
@@ -543,7 +543,7 @@ struct is_class< std::pair<T1, T2> >
543
543
  //This specialization is needed to avoid instantiation of pair in
544
544
  //is_class, and allow recursive maps.
545
545
  {
546
- static const bool value = true;
546
+ BOOST_STATIC_CONSTEXPR bool value = true;
547
547
  };
548
548
 
549
549
 
@@ -555,7 +555,7 @@ template<class A, class B>
555
555
  struct is_trivially_copy_assignable
556
556
  <boost::container::dtl::pair<A,B> >
557
557
  {
558
- static const bool value = false ;
558
+ BOOST_STATIC_CONSTEXPR bool value = false ;
559
559
  };
560
560
 
561
561
  template<class T>
@@ -565,7 +565,7 @@ template<class A, class B>
565
565
  struct is_trivially_move_assignable
566
566
  <boost::container::dtl::pair<A,B> >
567
567
  {
568
- static const bool value = false;
568
+ BOOST_STATIC_CONSTEXPR bool value = false;
569
569
  };
570
570
 
571
571
  template<class T>
@@ -574,7 +574,7 @@ struct is_trivially_copy_assignable;
574
574
  template<class A, class B>
575
575
  struct is_trivially_copy_constructible<boost::container::dtl::pair<A,B> >
576
576
  {
577
- static const bool value = false;
577
+ BOOST_STATIC_CONSTEXPR bool value = false;
578
578
  };
579
579
 
580
580
  template<class T>
@@ -583,7 +583,7 @@ struct is_trivially_move_assignable;
583
583
  template<class A, class B>
584
584
  struct is_trivially_move_constructible<boost::container::dtl::pair<A,B> >
585
585
  {
586
- static const bool value = false;
586
+ BOOST_STATIC_CONSTEXPR bool value = false;
587
587
  };
588
588
 
589
589
  template<class T>
@@ -592,7 +592,7 @@ struct is_trivially_destructible;
592
592
  template<class A, class B>
593
593
  struct is_trivially_destructible<boost::container::dtl::pair<A,B> >
594
594
  {
595
- static const bool value = boost::move_detail::is_trivially_destructible<A>::value &&
595
+ BOOST_STATIC_CONSTEXPR bool value = boost::move_detail::is_trivially_destructible<A>::value &&
596
596
  boost::move_detail::is_trivially_destructible<B>::value ;
597
597
  };
598
598
 
@@ -45,7 +45,7 @@ struct node_slist
45
45
  template<class T>
46
46
  struct is_stateless_segment_manager
47
47
  {
48
- static const bool value = false;
48
+ BOOST_STATIC_CONSTEXPR bool value = false;
49
49
  };
50
50
 
51
51
  } //namespace dtl {
@@ -39,7 +39,7 @@ struct node_slist_helper
39
39
  struct fake_segment_manager
40
40
  {
41
41
  typedef void * void_pointer;
42
- static const std::size_t PayloadPerAllocation = BOOST_CONTAINER_ALLOCATION_PAYLOAD;
42
+ BOOST_STATIC_CONSTEXPR std::size_t PayloadPerAllocation = BOOST_CONTAINER_ALLOCATION_PAYLOAD;
43
43
 
44
44
  typedef boost::container::dtl::
45
45
  basic_multiallocation_chain<void*> multiallocation_chain;
@@ -90,7 +90,7 @@ template<>
90
90
  struct is_stateless_segment_manager
91
91
  <boost::container::dtl::fake_segment_manager>
92
92
  {
93
- static const bool value = true;
93
+ BOOST_STATIC_CONSTEXPR bool value = true;
94
94
  };
95
95
 
96
96
  } //namespace dtl {
@@ -31,11 +31,11 @@ namespace pmr {
31
31
 
32
32
  class pool_data_t;
33
33
 
34
- static const std::size_t pool_options_minimum_max_blocks_per_chunk = 1u;
35
- static const std::size_t pool_options_default_max_blocks_per_chunk = 32u;
36
- static const std::size_t pool_options_minimum_largest_required_pool_block =
34
+ BOOST_CONTAINER_CONSTANT_VAR std::size_t pool_options_minimum_max_blocks_per_chunk = 1u;
35
+ BOOST_CONTAINER_CONSTANT_VAR std::size_t pool_options_default_max_blocks_per_chunk = 32u;
36
+ BOOST_CONTAINER_CONSTANT_VAR std::size_t pool_options_minimum_largest_required_pool_block =
37
37
  memory_resource::max_align > 2*sizeof(void*) ? memory_resource::max_align : 2*sizeof(void*);
38
- static const std::size_t pool_options_default_largest_required_pool_block =
38
+ BOOST_CONTAINER_CONSTANT_VAR std::size_t pool_options_default_largest_required_pool_block =
39
39
  pool_options_minimum_largest_required_pool_block > 4096u
40
40
  ? pool_options_minimum_largest_required_pool_block : 4096u;
41
41
 
@@ -52,7 +52,6 @@
52
52
  #include <boost/move/detail/fwd_macros.hpp>
53
53
  #endif
54
54
  #include <boost/move/detail/move_helpers.hpp>
55
- #include <boost/move/detail/force_ptr.hpp>
56
55
 
57
56
 
58
57
 
@@ -252,13 +251,13 @@ struct intrusive_tree_type
252
251
  //Trait to detect manually rebalanceable tree types
253
252
  template<boost::container::tree_type_enum tree_type_value>
254
253
  struct is_manually_balanceable
255
- { static const bool value = true; };
254
+ { BOOST_STATIC_CONSTEXPR bool value = true; };
256
255
 
257
256
  template<> struct is_manually_balanceable<red_black_tree>
258
- { static const bool value = false; };
257
+ { BOOST_STATIC_CONSTEXPR bool value = false; };
259
258
 
260
259
  template<> struct is_manually_balanceable<avl_tree>
261
- { static const bool value = false; };
260
+ { BOOST_STATIC_CONSTEXPR bool value = false; };
262
261
 
263
262
  //Proxy traits to implement different operations depending on the
264
263
  //is_manually_balanceable<>::value
@@ -689,40 +688,13 @@ class tree
689
688
  boost::container::dtl::is_nothrow_move_assignable<Compare>::value)
690
689
  {
691
690
  if (BOOST_LIKELY(this != &x)) {
692
- NodeAlloc &this_alloc = this->node_alloc();
693
- NodeAlloc &x_alloc = x.node_alloc();
694
- const bool propagate_alloc = allocator_traits<NodeAlloc>::
695
- propagate_on_container_move_assignment::value;
696
- const bool allocators_equal = this_alloc == x_alloc; (void)allocators_equal;
697
- //Resources can be transferred if both allocators are
698
- //going to be equal after this function (either propagated or already equal)
699
- if(propagate_alloc || allocators_equal){
700
- //Destroy
701
- this->clear();
702
- //Move allocator if needed
703
- this->AllocHolder::move_assign_alloc(x);
704
- //Obtain resources
705
- this->icont() = boost::move(x.icont());
706
- }
707
- //Else do a one by one move
708
- else{
709
- //Transfer all the nodes to a temporary tree
710
- //If anything goes wrong, all the nodes will be destroyed
711
- //automatically
712
- Icont other_tree(::boost::move(this->icont()));
713
-
714
- //Now recreate the source tree reusing nodes stored by other_tree
715
- this->icont().clone_from
716
- (::boost::move(x.icont())
717
- , RecyclingCloner<AllocHolder, true>(*this, other_tree)
718
- , Destroyer(this->node_alloc()));
719
-
720
- //If there are remaining nodes, destroy them
721
- NodePtr p;
722
- while((p = other_tree.unlink_leftmost_without_rebalance())){
723
- AllocHolder::destroy_node(p);
724
- }
725
- }
691
+ //We know resources can be transferred at comiple time if both allocators are
692
+ //always equal or the allocator is going to be propagated
693
+ const bool can_steal_resources_alloc
694
+ = allocator_traits_type::propagate_on_container_move_assignment::value
695
+ || allocator_traits_type::is_always_equal::value;
696
+ dtl::bool_<can_steal_resources_alloc> flag;
697
+ this->priv_move_assign(boost::move(x), flag);
726
698
  }
727
699
  return *this;
728
700
  }
@@ -896,6 +868,42 @@ class tree
896
868
 
897
869
 
898
870
  private:
871
+ void priv_move_assign(BOOST_RV_REF(tree) x, dtl::bool_<true> /*steal_resources*/)
872
+ {
873
+ //Destroy objects but retain memory in case x reuses it in the future
874
+ this->clear();
875
+ //Move allocator if needed
876
+ this->AllocHolder::move_assign_alloc(x);
877
+ //Obtain resources
878
+ this->icont() = boost::move(x.icont());
879
+ }
880
+
881
+ void priv_move_assign(BOOST_RV_REF(tree) x, dtl::bool_<false> /*steal_resources*/)
882
+ {
883
+ //We can't guarantee a compile-time equal allocator or propagation so fallback to runtime
884
+ //Resources can be transferred if both allocators are equal
885
+ if (this->node_alloc() == x.node_alloc()) {
886
+ this->priv_move_assign(boost::move(x), dtl::true_());
887
+ }
888
+ else {
889
+ //Transfer all the nodes to a temporary tree
890
+ //If anything goes wrong, all the nodes will be destroyed
891
+ //automatically
892
+ Icont other_tree(::boost::move(this->icont()));
893
+
894
+ //Now recreate the source tree reusing nodes stored by other_tree
895
+ this->icont().clone_from
896
+ (::boost::move(x.icont())
897
+ , RecyclingCloner<AllocHolder, true>(*this, other_tree)
898
+ , Destroyer(this->node_alloc()));
899
+
900
+ //If there are remaining nodes, destroy them
901
+ NodePtr p;
902
+ while ((p = other_tree.unlink_leftmost_without_rebalance())) {
903
+ AllocHolder::destroy_node(p);
904
+ }
905
+ }
906
+ }
899
907
 
900
908
  template<class KeyConvertible, class M>
901
909
  iiterator priv_insert_or_assign_commit
@@ -1134,6 +1142,31 @@ class tree
1134
1142
  return ret;
1135
1143
  }
1136
1144
 
1145
+ template <class K>
1146
+ inline typename dtl::enable_if_c<
1147
+ dtl::is_transparent<key_compare>::value && //transparent
1148
+ !dtl::is_convertible<K, iterator>::value && //not convertible to iterator
1149
+ !dtl::is_convertible<K, const_iterator>::value //not convertible to const_iterator
1150
+ , size_type>::type
1151
+ erase(const K& k)
1152
+ { return AllocHolder::erase_key(k, KeyNodeCompare(key_comp()), alloc_version()); }
1153
+
1154
+ template <class K>
1155
+ inline typename dtl::enable_if_c<
1156
+ dtl::is_transparent<key_compare>::value && //transparent
1157
+ !dtl::is_convertible<K, iterator>::value && //not convertible to iterator
1158
+ !dtl::is_convertible<K, const_iterator>::value //not convertible to const_iterator
1159
+ , size_type>::type
1160
+ erase_unique(const K& k)
1161
+ {
1162
+ iterator i = this->find(k);
1163
+ size_type ret = static_cast<size_type>(i != this->end());
1164
+
1165
+ if (ret)
1166
+ this->erase(i);
1167
+ return ret;
1168
+ }
1169
+
1137
1170
  iterator erase(const_iterator first, const_iterator last)
1138
1171
  {
1139
1172
  BOOST_ASSERT(first == last || (first != this->cend() && (priv_is_linked)(first)));
@@ -1232,13 +1265,13 @@ class tree
1232
1265
  BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1233
1266
  typename dtl::enable_if_transparent<key_compare, K, iterator>::type
1234
1267
  find(const K& k)
1235
- { return iterator(this->icont().find(k, KeyNodeCompare())); }
1268
+ { return iterator(this->icont().find(k, KeyNodeCompare(key_comp()))); }
1236
1269
 
1237
1270
  template <class K>
1238
1271
  BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1239
1272
  typename dtl::enable_if_transparent<key_compare, K, const_iterator>::type
1240
1273
  find(const K& k) const
1241
- { return const_iterator(this->non_const_icont().find(k, KeyNodeCompare())); }
1274
+ { return const_iterator(this->non_const_icont().find(k, KeyNodeCompare(key_comp()))); }
1242
1275
 
1243
1276
  BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1244
1277
  size_type count(const key_type& k) const
@@ -1248,7 +1281,7 @@ class tree
1248
1281
  BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1249
1282
  typename dtl::enable_if_transparent<key_compare, K, size_type>::type
1250
1283
  count(const K& k) const
1251
- { return size_type(this->icont().count(k, KeyNodeCompare())); }
1284
+ { return size_type(this->icont().count(k, KeyNodeCompare(key_comp()))); }
1252
1285
 
1253
1286
  BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1254
1287
  bool contains(const key_type& x) const
@@ -1272,13 +1305,13 @@ class tree
1272
1305
  BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1273
1306
  typename dtl::enable_if_transparent<key_compare, K, iterator>::type
1274
1307
  lower_bound(const K& k)
1275
- { return iterator(this->icont().lower_bound(k, KeyNodeCompare())); }
1308
+ { return iterator(this->icont().lower_bound(k, KeyNodeCompare(key_comp()))); }
1276
1309
 
1277
1310
  template <class K>
1278
1311
  BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1279
1312
  typename dtl::enable_if_transparent<key_compare, K, const_iterator>::type
1280
1313
  lower_bound(const K& k) const
1281
- { return const_iterator(this->non_const_icont().lower_bound(k, KeyNodeCompare())); }
1314
+ { return const_iterator(this->non_const_icont().lower_bound(k, KeyNodeCompare(key_comp()))); }
1282
1315
 
1283
1316
  BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1284
1317
  iterator upper_bound(const key_type& k)
@@ -1292,13 +1325,13 @@ class tree
1292
1325
  BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1293
1326
  typename dtl::enable_if_transparent<key_compare, K, iterator>::type
1294
1327
  upper_bound(const K& k)
1295
- { return iterator(this->icont().upper_bound(k, KeyNodeCompare())); }
1328
+ { return iterator(this->icont().upper_bound(k, KeyNodeCompare(key_comp()))); }
1296
1329
 
1297
1330
  template <class K>
1298
1331
  BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1299
1332
  typename dtl::enable_if_transparent<key_compare, K, const_iterator>::type
1300
1333
  upper_bound(const K& k) const
1301
- { return const_iterator(this->non_const_icont().upper_bound(k, KeyNodeCompare())); }
1334
+ { return const_iterator(this->non_const_icont().upper_bound(k, KeyNodeCompare(key_comp()))); }
1302
1335
 
1303
1336
  BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1304
1337
  std::pair<iterator,iterator> equal_range(const key_type& k)
@@ -1322,7 +1355,7 @@ class tree
1322
1355
  equal_range(const K& k)
1323
1356
  {
1324
1357
  std::pair<iiterator, iiterator> ret =
1325
- this->icont().equal_range(k, KeyNodeCompare());
1358
+ this->icont().equal_range(k, KeyNodeCompare(key_comp()));
1326
1359
  return std::pair<iterator,iterator>(iterator(ret.first), iterator(ret.second));
1327
1360
  }
1328
1361
 
@@ -1332,7 +1365,7 @@ class tree
1332
1365
  equal_range(const K& k) const
1333
1366
  {
1334
1367
  std::pair<iiterator, iiterator> ret =
1335
- this->non_const_icont().equal_range(k, KeyNodeCompare());
1368
+ this->non_const_icont().equal_range(k, KeyNodeCompare(key_comp()));
1336
1369
  return std::pair<const_iterator,const_iterator>
1337
1370
  (const_iterator(ret.first), const_iterator(ret.second));
1338
1371
  }
@@ -1360,7 +1393,7 @@ class tree
1360
1393
  lower_bound_range(const K& k)
1361
1394
  {
1362
1395
  std::pair<iiterator, iiterator> ret =
1363
- this->icont().lower_bound_range(k, KeyNodeCompare());
1396
+ this->icont().lower_bound_range(k, KeyNodeCompare(key_comp()));
1364
1397
  return std::pair<iterator,iterator>(iterator(ret.first), iterator(ret.second));
1365
1398
  }
1366
1399
 
@@ -1370,7 +1403,7 @@ class tree
1370
1403
  lower_bound_range(const K& k) const
1371
1404
  {
1372
1405
  std::pair<iiterator, iiterator> ret =
1373
- this->non_const_icont().lower_bound_range(k, KeyNodeCompare());
1406
+ this->non_const_icont().lower_bound_range(k, KeyNodeCompare(key_comp()));
1374
1407
  return std::pair<const_iterator,const_iterator>
1375
1408
  (const_iterator(ret.first), const_iterator(ret.second));
1376
1409
  }
@@ -1425,9 +1458,10 @@ struct has_trivial_destructor_after_move
1425
1458
  {
1426
1459
  typedef typename ::boost::container::dtl::tree<T, KeyOfValue, Compare, Allocator, Options>::allocator_type allocator_type;
1427
1460
  typedef typename ::boost::container::allocator_traits<allocator_type>::pointer pointer;
1428
- static const bool value = ::boost::has_trivial_destructor_after_move<allocator_type>::value &&
1429
- ::boost::has_trivial_destructor_after_move<pointer>::value &&
1430
- ::boost::has_trivial_destructor_after_move<Compare>::value;
1461
+ BOOST_STATIC_CONSTEXPR bool value =
1462
+ ::boost::has_trivial_destructor_after_move<allocator_type>::value &&
1463
+ ::boost::has_trivial_destructor_after_move<pointer>::value &&
1464
+ ::boost::has_trivial_destructor_after_move<Compare>::value;
1431
1465
  };
1432
1466
 
1433
1467
  } //namespace boost {
@@ -57,20 +57,20 @@ struct has_version
57
57
  template <class U> static two test(...);
58
58
  template <class U> static char test(const typename U::version*);
59
59
  public:
60
- static const bool value = sizeof(test<T>(0)) == 1;
60
+ BOOST_STATIC_CONSTEXPR bool value = sizeof(test<T>(0)) == 1;
61
61
  void dummy(){}
62
62
  };
63
63
 
64
64
  template <class T, bool = has_version<T>::value>
65
65
  struct version
66
66
  {
67
- static const unsigned value = 1;
67
+ BOOST_STATIC_CONSTEXPR unsigned value = 1;
68
68
  };
69
69
 
70
70
  template <class T>
71
71
  struct version<T, true>
72
72
  {
73
- static const unsigned value = extract_version<T>::type::value;
73
+ BOOST_STATIC_CONSTEXPR unsigned value = extract_version<T>::type::value;
74
74
  };
75
75
 
76
76
  } //namespace impl
@@ -83,7 +83,7 @@ struct version
83
83
  template<class T, unsigned N>
84
84
  struct is_version
85
85
  {
86
- static const bool value =
86
+ BOOST_STATIC_CONSTEXPR bool value =
87
87
  is_same< typename version<T>::type, integral_constant<unsigned, N> >::value;
88
88
  };
89
89
 
@@ -230,4 +230,16 @@ namespace boost {
230
230
  # define BOOST_CONTAINER_STATIC_ASSERT_MSG( B, Msg ) BOOST_CONTAINER_STATIC_ASSERT( B )
231
231
  #endif
232
232
 
233
+ #if !defined(BOOST_NO_CXX17_INLINE_VARIABLES)
234
+ # define BOOST_CONTAINER_CONSTANT_VAR BOOST_INLINE_CONSTEXPR
235
+ #else
236
+ # define BOOST_CONTAINER_CONSTANT_VAR static BOOST_CONSTEXPR_OR_CONST
237
+ #endif
238
+
239
+ #if defined(__GNUC__) && ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40600)
240
+ #define BOOST_CONTAINER_GCC_COMPATIBLE_HAS_DIAGNOSTIC_IGNORED
241
+ #elif defined(__clang__)
242
+ #define BOOST_CONTAINER_GCC_COMPATIBLE_HAS_DIAGNOSTIC_IGNORED
243
+ #endif
244
+
233
245
  #endif //#ifndef BOOST_CONTAINER_DETAIL_WORKAROUND_HPP