passenger 6.0.22 → 6.0.24

Sign up to get free protection for your applications and to get access to all the features.
Files changed (334) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +59 -1
  3. data/Rakefile +13 -2
  4. data/bin/passenger-install-apache2-module +5 -0
  5. data/bin/passenger-install-nginx-module +18 -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 +24 -13
  11. data/package.json +1 -1
  12. data/passenger.gemspec +4 -2
  13. data/resources/templates/standalone/server.erb +1 -0
  14. data/src/agent/Core/ApplicationPool/Group/InitializationAndShutdown.cpp +8 -0
  15. data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +10 -2
  16. data/src/agent/Core/ApplicationPool/Group/LifetimeAndBasics.cpp +8 -0
  17. data/src/agent/Core/ApplicationPool/Group/Miscellaneous.cpp +9 -0
  18. data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +9 -0
  19. data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +63 -50
  20. data/src/agent/Core/ApplicationPool/Group/SessionManagement.cpp +19 -9
  21. data/src/agent/Core/ApplicationPool/Group/SpawningAndRestarting.cpp +8 -0
  22. data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +9 -1
  23. data/src/agent/Core/ApplicationPool/Group/Verification.cpp +8 -0
  24. data/src/agent/Core/ApplicationPool/Group.h +15 -5
  25. data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +5 -0
  26. data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +5 -0
  27. data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +5 -0
  28. data/src/agent/Core/ApplicationPool/Pool/GroupUtils.cpp +5 -0
  29. data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +5 -0
  30. data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +5 -0
  31. data/src/agent/Core/ApplicationPool/Pool/ProcessUtils.cpp +5 -0
  32. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +11 -4
  33. data/src/agent/Core/ApplicationPool/Pool.h +0 -2
  34. data/src/agent/Core/ApplicationPool/Process.h +22 -6
  35. data/src/agent/Core/ApplicationPool/Session.h +6 -1
  36. data/src/agent/Core/Config.h +8 -3
  37. data/src/agent/Core/Controller/CheckoutSession.cpp +24 -1
  38. data/src/agent/Core/Controller/Config.h +5 -1
  39. data/src/agent/Core/Controller.h +1 -0
  40. data/src/agent/Core/CoreMain.cpp +10 -17
  41. data/src/agent/Core/OptionParser.h +3 -0
  42. data/src/agent/Core/SpawningKit/ErrorRenderer.h +5 -0
  43. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +1 -53
  44. data/src/agent/Core/SpawningKit/Handshake/Session.h +3 -0
  45. data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +5 -2
  46. data/src/agent/Core/SpawningKit/SmartSpawner.h +6 -2
  47. data/src/agent/Core/SpawningKit/Spawner.h +4 -0
  48. data/src/agent/Shared/Fundamentals/AbortHandler.cpp +88 -9
  49. data/src/agent/Shared/Fundamentals/AbortHandler.h +2 -0
  50. data/src/agent/Shared/Fundamentals/Initialization.cpp +9 -3
  51. data/src/agent/Shared/Fundamentals/Initialization.h +3 -3
  52. data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +6 -7
  53. data/src/agent/Watchdog/Config.h +2 -1
  54. data/src/agent/Watchdog/WatchdogMain.cpp +4 -7
  55. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +5 -0
  56. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +15 -0
  57. data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +5 -3
  58. data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp +5 -0
  59. data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp +3 -0
  60. data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp +13 -0
  61. data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp +7 -0
  62. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +16 -0
  63. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +3 -0
  64. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +2 -1
  65. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder +2 -1
  66. data/src/cxx_supportlib/Constants.h +1 -1
  67. data/src/cxx_supportlib/DataStructures/LString.h +4 -0
  68. data/src/cxx_supportlib/DataStructures/StringMap.h +0 -1
  69. data/src/cxx_supportlib/FileTools/PathManip.cpp +1 -1
  70. data/src/cxx_supportlib/SafeLibev.h +1 -3
  71. data/src/cxx_supportlib/ServerKit/Hooks.h +2 -2
  72. data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +0 -1
  73. data/src/cxx_supportlib/ServerKit/HttpServer.h +15 -10
  74. data/src/cxx_supportlib/ServerKit/Server.h +0 -6
  75. data/src/cxx_supportlib/Utils/AsyncSignalSafeUtils.h +2 -0
  76. data/src/cxx_supportlib/Utils/SpeedMeter.h +0 -3
  77. data/src/cxx_supportlib/oxt/implementation.cpp +11 -0
  78. data/src/cxx_supportlib/oxt/system_calls.cpp +10 -3
  79. data/src/cxx_supportlib/oxt/thread.hpp +1 -1
  80. data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +35 -9
  81. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_immediate_executor.hpp +3 -2
  82. data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +1 -1
  83. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +74 -68
  84. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +11 -11
  85. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +2 -2
  86. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +2 -2
  87. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +10 -10
  88. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +1 -1
  89. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +3 -3
  90. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +2 -2
  91. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +1 -1
  92. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +2 -2
  93. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +9 -9
  94. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +2 -2
  95. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +6 -6
  96. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +2 -2
  97. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +1 -1
  98. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +88 -22
  99. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +91 -22
  100. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +105 -23
  101. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_immediate_executor.hpp +90 -23
  102. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +2 -2
  103. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +1 -1
  104. data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_after.hpp +303 -0
  105. data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_at.hpp +296 -0
  106. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/impl/co_composed.hpp → co_composed.hpp} +208 -61
  107. data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +49 -0
  108. data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +10 -201
  109. data/src/cxx_supportlib/vendor-modified/boost/asio/composed.hpp +415 -0
  110. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +214 -48
  111. data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +3 -4
  112. data/src/cxx_supportlib/vendor-modified/boost/asio/default_completion_token.hpp +91 -0
  113. data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +9 -5
  114. data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +2 -2
  115. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
  116. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_message.hpp → detail/completion_message.hpp} +14 -16
  117. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_payload.hpp → detail/completion_payload.hpp} +30 -32
  118. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_handler.hpp → detail/completion_payload_handler.hpp} +15 -13
  119. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +26 -32
  120. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +5 -1
  121. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +14 -118
  122. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +36 -33
  123. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +1 -1
  124. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +7 -5
  125. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +6 -4
  126. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +44 -35
  127. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +1 -1
  128. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiation_base.hpp +64 -0
  129. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +0 -11
  130. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +20 -16
  131. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +0 -1
  132. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +4 -4
  133. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +23 -18
  134. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +9 -0
  135. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +1 -1
  136. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +1 -1
  137. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +11 -1
  138. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timed_cancel_op.hpp +363 -0
  139. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +29 -51
  140. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +1 -1
  141. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +1 -1
  142. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +1 -1
  143. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +1 -1
  144. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +1 -1
  145. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +1 -1
  146. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +1 -1
  147. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +1 -1
  148. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +2 -1
  149. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +2 -1
  150. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +2 -114
  151. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +2 -3
  152. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +27 -19
  153. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +0 -1
  154. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +17 -15
  155. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +2 -3
  156. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +4 -2
  157. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +3 -5
  158. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +12 -7
  159. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +1 -1
  160. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +38 -40
  161. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +3 -3
  162. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +5 -5
  163. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +1 -1
  164. data/src/cxx_supportlib/vendor-modified/boost/asio/immediate.hpp +144 -0
  165. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +14 -7
  166. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +45 -14
  167. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +3 -3
  168. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_after.hpp +270 -0
  169. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_at.hpp +270 -0
  170. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +8 -0
  171. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +60 -166
  172. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +14 -7
  173. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +2 -2
  174. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +14 -7
  175. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +26 -177
  176. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +16 -82
  177. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +13 -286
  178. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +55 -18
  179. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +1 -1
  180. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +26 -185
  181. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +16 -87
  182. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +5 -5
  183. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +6 -6
  184. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
  185. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +1 -1
  186. data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +12 -6
  187. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +1 -1
  188. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +2 -2
  189. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +127 -28
  190. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +70 -20
  191. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +114 -36
  192. data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +43 -3
  193. data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +2 -2
  194. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +0 -1
  195. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +2 -2
  196. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +10 -7
  197. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +5 -5
  198. data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +2 -2
  199. data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +2 -2
  200. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +1 -1
  201. data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +1 -1
  202. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
  203. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +147 -35
  204. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +74 -22
  205. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +6 -0
  206. data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +4 -1
  207. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +42 -11
  208. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +15 -37
  209. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +8 -8
  210. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
  211. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +151 -10
  212. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +11 -9
  213. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +611 -102
  214. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +1 -1
  215. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +47 -47
  216. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +25 -24
  217. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocation_type.hpp +7 -7
  218. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_list.hpp +2 -2
  219. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_slist.hpp +2 -2
  220. data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +35 -1
  221. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +14 -14
  222. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +1 -1
  223. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +55 -23
  224. data/src/cxx_supportlib/vendor-modified/boost/container/detail/function_detector.hpp +1 -1
  225. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +2 -2
  226. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +1 -1
  227. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_pair.hpp +4 -4
  228. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +8 -8
  229. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +9 -9
  230. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +4 -4
  231. data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +96 -10
  232. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +19 -4
  233. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +1 -1
  234. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +17 -17
  235. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +1 -1
  236. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +2 -2
  237. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +4 -4
  238. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +86 -52
  239. data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +4 -4
  240. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +12 -0
  241. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +145 -65
  242. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +105 -22
  243. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +2 -2
  244. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +30 -22
  245. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +19 -2
  246. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +1 -1
  247. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +15 -8
  248. data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +6 -5
  249. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +15 -15
  250. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +1 -1
  251. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +1 -1
  252. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +3 -3
  253. data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +1 -1
  254. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +2 -2
  255. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +31 -24
  256. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +45 -43
  257. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +45 -33
  258. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +5 -7
  259. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +55 -47
  260. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +3 -3
  261. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +222 -73
  262. data/src/cxx_supportlib/vendor-modified/boost/core/detail/minstd_rand.hpp +58 -0
  263. data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +13 -13
  264. data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +53 -5
  265. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +1 -0
  266. data/src/cxx_supportlib/vendor-modified/boost/core/pointer_in_range.hpp +49 -0
  267. data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +2 -0
  268. data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +7 -2
  269. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +22 -34
  270. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +141 -38
  271. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algorithm.hpp +8 -8
  272. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +1 -1
  273. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +8 -6
  274. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +18 -18
  275. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +22 -17
  276. data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +3 -1
  277. data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +0 -1
  278. data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +53 -0
  279. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +9 -1
  280. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +6 -1
  281. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
  282. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/integral_wrapper.hpp +2 -1
  283. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  284. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/requires_cxx11.hpp +1 -1
  285. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +4 -1
  286. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +13 -1
  287. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +13 -1
  288. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +15 -0
  289. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +13 -1
  290. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +15 -0
  291. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +22 -6
  292. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +38 -10
  293. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +111 -2
  294. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/cumulative_stats.hpp +177 -0
  295. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +11 -1
  296. data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +33 -7
  297. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +12 -0
  298. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +15 -0
  299. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +12 -0
  300. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +14 -0
  301. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +19 -0
  302. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +12 -0
  303. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +15 -0
  304. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +12 -0
  305. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +14 -0
  306. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +17 -0
  307. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +1 -43
  308. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  309. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +8 -0
  310. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +12 -0
  311. data/src/nginx_module/Configuration.c +7 -2
  312. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +6 -0
  313. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +15 -0
  314. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +14 -0
  315. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +3 -0
  316. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +4 -0
  317. data/src/ruby_native_extension/passenger_native_support.c +1 -0
  318. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +5 -0
  319. data/src/ruby_supportlib/phusion_passenger/config/compile_nginx_engine_command.rb +6 -2
  320. data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +10 -0
  321. data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +12 -4
  322. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +5 -0
  323. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +32 -5
  324. data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/gems.rb +10 -0
  325. data/src/ruby_supportlib/phusion_passenger/rack/handler.rb +73 -0
  326. data/src/ruby_supportlib/phusion_passenger/rack_handler.rb +30 -56
  327. data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +5 -0
  328. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +1 -0
  329. data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +0 -4
  330. data/src/ruby_supportlib/phusion_passenger/utils/json.rb +7 -198
  331. data/src/ruby_supportlib/phusion_passenger/utils/strscan.rb +67 -0
  332. data/src/ruby_supportlib/phusion_passenger/utils.rb +5 -15
  333. data/src/ruby_supportlib/phusion_passenger.rb +5 -5
  334. metadata +39 -10
@@ -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