passenger 6.0.1 → 6.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +145 -18
  3. data/CONTRIBUTORS +6 -0
  4. data/bin/passenger-install-nginx-module +1 -1
  5. data/bin/passenger-status +15 -0
  6. data/build/misc.rb +3 -1
  7. data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder/builder.rb +56 -3
  8. data/dev/copy_boost_headers +1 -0
  9. data/package.json +1 -1
  10. data/passenger.gemspec +9 -1
  11. data/resources/templates/error_renderer/with_details/src/bootstrap/bootstrap.css +0 -0
  12. data/resources/templates/error_renderer/with_details/src/bootstrap/bootstrap.js +0 -0
  13. data/resources/templates/error_renderer/with_details/src/bootstrap/config.json +0 -0
  14. data/resources/templates/standalone/http.erb +2 -0
  15. data/resources/templates/standalone/server.erb +1 -0
  16. data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +1 -1
  17. data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +1 -0
  18. data/src/agent/Core/ApplicationPool/Options.h +10 -0
  19. data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +1 -1
  20. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +1 -1
  21. data/src/agent/Core/Config.h +14 -1
  22. data/src/agent/Core/Controller.h +1 -0
  23. data/src/agent/Core/Controller/Config.h +5 -1
  24. data/src/agent/Core/Controller/ForwardResponse.cpp +13 -0
  25. data/src/agent/Core/Controller/InitRequest.cpp +3 -0
  26. data/src/agent/Core/Controller/InitializationAndShutdown.cpp +1 -0
  27. data/src/agent/Core/CoreMain.cpp +2 -1
  28. data/src/agent/Core/OptionParser.h +3 -0
  29. data/src/agent/Core/SpawningKit/Context.h +1 -0
  30. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +1 -1
  31. data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +5 -2
  32. data/src/agent/TempDirToucher/TempDirToucherMain.cpp +2 -0
  33. data/src/agent/Watchdog/Config.h +15 -1
  34. data/src/agent/Watchdog/WatchdogMain.cpp +7 -0
  35. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +10 -0
  36. data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp +10 -0
  37. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +30 -0
  38. data/src/apache2_module/Hooks.cpp +6 -0
  39. data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp +20 -0
  40. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +24 -0
  41. data/src/cxx_supportlib/Constants.h +2 -1
  42. data/src/cxx_supportlib/LoggingKit/Config.h +2 -0
  43. data/src/cxx_supportlib/LoggingKit/Implementation.cpp +15 -9
  44. data/src/cxx_supportlib/ServerKit/HttpChunkedBodyParser.h +1 -1
  45. data/src/cxx_supportlib/SystemTools/ContainerHelpers.h +20 -19
  46. data/src/cxx_supportlib/WebSocketCommandReverseServer.h +11 -7
  47. data/src/cxx_supportlib/oxt/system_calls.cpp +10 -10
  48. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/finder.hpp +0 -4
  49. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +46 -37
  50. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +16 -15
  51. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +45 -26
  52. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/future.hpp +33 -0
  53. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +1 -1
  54. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_buffer_sequence.hpp +38 -14
  55. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +2 -0
  56. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.hpp +1 -1
  57. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +3 -1
  58. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +0 -1
  59. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/bad_address_cast.hpp +6 -1
  60. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +6 -4
  61. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_results.hpp +4 -4
  62. data/src/cxx_supportlib/vendor-modified/boost/asio/packaged_task.hpp +3 -3
  63. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +4 -4
  64. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +4 -4
  65. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +8 -6
  66. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_base.hpp +17 -0
  67. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +50 -5
  68. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +2 -1
  69. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +1 -1
  70. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +3 -2
  71. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
  72. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +4 -3
  73. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +5 -3
  74. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86_dcas.hpp +13 -12
  75. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/chrono.hpp +10 -10
  76. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp +34 -34
  77. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/thread_clock.hpp +4 -4
  78. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/chrono.hpp +8 -8
  79. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp +27 -27
  80. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/thread_clock.hpp +4 -4
  81. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/system.hpp +5 -4
  82. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +1 -1
  83. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer.hpp +3 -3
  84. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/allocators.hpp +89 -0
  85. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/base.hpp +83 -74
  86. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/details.hpp +21 -33
  87. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/space_optimized.hpp +5 -5
  88. data/src/cxx_supportlib/vendor-modified/boost/concept/assert.hpp +1 -1
  89. data/src/cxx_supportlib/vendor-modified/boost/concept/detail/general.hpp +3 -3
  90. data/src/cxx_supportlib/vendor-modified/boost/concept/detail/has_constraints.hpp +3 -3
  91. data/src/cxx_supportlib/vendor-modified/boost/concept/usage.hpp +1 -1
  92. data/src/cxx_supportlib/vendor-modified/boost/concept_check.hpp +19 -19
  93. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +8 -0
  94. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +5 -2
  95. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +5 -1
  96. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +6 -2
  97. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/comeau.hpp +1 -1
  98. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +4 -0
  99. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +368 -52
  100. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +4 -1
  101. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +6 -3
  102. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +3 -0
  103. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/greenhills.hpp +1 -1
  104. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/hp_acc.hpp +1 -1
  105. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +6 -1
  106. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/kai.hpp +1 -1
  107. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +4 -1
  108. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +4 -1
  109. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +3 -3
  110. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +3 -0
  111. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +3 -0
  112. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +4 -1
  113. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +9 -4
  114. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +4 -0
  115. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp_zos.hpp +1 -0
  116. data/src/cxx_supportlib/vendor-modified/boost/config/detail/select_compiler_config.hpp +1 -2
  117. data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +13 -0
  118. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +2 -2
  119. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +14 -4
  120. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +4 -4
  121. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +262 -2
  122. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +4 -3
  123. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +1 -1
  124. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +7 -0
  125. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +22 -19
  126. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +833 -459
  127. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +24 -6
  128. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocator_version_traits.hpp +2 -1
  129. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +61 -5
  130. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +33 -8
  131. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +132 -41
  132. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator.hpp +16 -0
  133. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +54 -0
  134. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +58 -0
  135. data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +28 -23
  136. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +167 -115
  137. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +55 -0
  138. data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +3 -0
  139. data/src/cxx_supportlib/vendor-modified/boost/container/detail/thread_mutex.hpp +181 -0
  140. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +167 -29
  141. data/src/cxx_supportlib/vendor-modified/boost/container/detail/type_traits.hpp +2 -0
  142. data/src/cxx_supportlib/vendor-modified/boost/container/detail/variadic_templates_tools.hpp +1 -1
  143. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +18 -0
  144. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +389 -3
  145. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +262 -0
  146. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +52 -8
  147. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +364 -0
  148. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +4 -2
  149. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +1 -1
  150. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/synchronized_pool_resource.hpp +3 -2
  151. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +286 -6
  152. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +56 -8
  153. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +43 -6
  154. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +100 -31
  155. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +2 -1
  156. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +126 -69
  157. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +75 -51
  158. data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +136 -0
  159. data/src/cxx_supportlib/vendor-modified/boost/core/exchange.hpp +49 -0
  160. data/src/cxx_supportlib/vendor-modified/boost/core/explicit_operator_bool.hpp +9 -0
  161. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +101 -130
  162. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test_trait.hpp +2 -2
  163. data/src/cxx_supportlib/vendor-modified/boost/core/noncopyable.hpp +16 -1
  164. data/src/cxx_supportlib/vendor-modified/boost/core/quick_exit.hpp +59 -0
  165. data/src/cxx_supportlib/vendor-modified/boost/core/ref.hpp +2 -1
  166. data/src/cxx_supportlib/vendor-modified/boost/core/swap.hpp +9 -2
  167. data/src/cxx_supportlib/vendor-modified/boost/core/typeinfo.hpp +26 -10
  168. data/src/cxx_supportlib/vendor-modified/boost/date_time/compiler_config.hpp +5 -0
  169. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_duration.hpp +3 -3
  170. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_duration.hpp +1 -1
  171. data/src/cxx_supportlib/vendor-modified/boost/detail/basic_pointerbuf.hpp +1 -1
  172. data/src/cxx_supportlib/vendor-modified/boost/detail/indirect_traits.hpp +38 -47
  173. data/src/cxx_supportlib/vendor-modified/boost/detail/lcast_precision.hpp +5 -5
  174. data/src/cxx_supportlib/vendor-modified/boost/detail/reference_content.hpp +7 -7
  175. data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +62 -58
  176. data/src/cxx_supportlib/vendor-modified/boost/function.hpp +1 -1
  177. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +29 -29
  178. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +38 -40
  179. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_rt.hpp +4 -4
  180. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +44 -44
  181. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +39 -39
  182. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +15 -15
  183. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +7 -7
  184. data/src/cxx_supportlib/vendor-modified/boost/intrusive/derivation_value_traits.hpp +1 -1
  185. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +14 -14
  186. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/avltree_node.hpp +9 -9
  187. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +7 -7
  188. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_iterator.hpp +1 -1
  189. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_node.hpp +2 -2
  190. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_cloner_disposer.hpp +2 -2
  191. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/rbtree_node.hpp +6 -6
  192. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/simple_disposers.hpp +1 -1
  193. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_iterator.hpp +1 -1
  194. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_node.hpp +1 -1
  195. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_iterator.hpp +1 -1
  196. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_node.hpp +3 -3
  197. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +33 -14
  198. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +12 -12
  199. data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +4 -4
  200. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_plus_bits.hpp +3 -0
  201. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +39 -39
  202. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +61 -61
  203. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +4 -4
  204. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +66 -66
  205. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +54 -54
  206. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +6 -2
  207. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +3 -3
  208. data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +1 -1
  209. data/src/cxx_supportlib/vendor-modified/boost/iterator/distance.hpp +65 -0
  210. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +1 -1
  211. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +1 -1
  212. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +23 -23
  213. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +4 -4
  214. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +13 -13
  215. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +1 -1
  216. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +5 -4
  217. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +1 -1
  218. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +5 -5
  219. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +5 -2
  220. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +18 -13
  221. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/cregex.cpp +4 -4
  222. data/src/cxx_supportlib/vendor-modified/boost/libs/system/src/error_code.cpp +16 -5
  223. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/future.cpp +1 -1
  224. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +14 -8
  225. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/tss_null.cpp +2 -2
  226. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/detail/fp_traits.hpp +13 -13
  227. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/math_fwd.hpp +27 -0
  228. data/src/cxx_supportlib/vendor-modified/boost/math/tools/config.hpp +1 -1
  229. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +29 -6
  230. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +12 -3
  231. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +1 -1
  232. data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +1 -1
  233. data/src/cxx_supportlib/vendor-modified/boost/move/algorithm.hpp +1 -1
  234. data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +8 -8
  235. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +2 -0
  236. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +3 -3
  237. data/src/cxx_supportlib/vendor-modified/boost/mpl/assert.hpp +23 -3
  238. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/experimental_traits.hpp +9 -3
  239. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +10 -11
  240. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +20 -1
  241. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +3 -3
  242. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +211 -101
  243. data/src/cxx_supportlib/vendor-modified/boost/parameter/python.hpp +5 -6
  244. data/src/cxx_supportlib/vendor-modified/boost/pool/detail/mutex.hpp +119 -25
  245. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture.h +1 -0
  246. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/arm.h +5 -0
  247. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/ptx.h +44 -0
  248. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler.h +1 -0
  249. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/compaq.h +1 -1
  250. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/nvcc.h +73 -0
  251. data/src/cxx_supportlib/vendor-modified/boost/predef/detail/endian_compat.h +3 -1
  252. data/src/cxx_supportlib/vendor-modified/boost/predef/language.h +1 -0
  253. data/src/cxx_supportlib/vendor-modified/boost/predef/language/cuda.h +52 -0
  254. data/src/cxx_supportlib/vendor-modified/boost/predef/make.h +4 -0
  255. data/src/cxx_supportlib/vendor-modified/boost/predef/os/cygwin.h +6 -1
  256. data/src/cxx_supportlib/vendor-modified/boost/predef/other/endian.h +1 -2
  257. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  258. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/config.hpp +17 -8
  259. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/stringize.hpp +4 -0
  260. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/wstringize.hpp +4 -0
  261. data/src/cxx_supportlib/vendor-modified/boost/random/detail/gray_coded_qrng.hpp +166 -0
  262. data/src/cxx_supportlib/vendor-modified/boost/random/detail/niederreiter_base2_table.hpp +513 -0
  263. data/src/cxx_supportlib/vendor-modified/boost/random/detail/qrng_base.hpp +291 -0
  264. data/src/cxx_supportlib/vendor-modified/boost/random/detail/sobol_table.hpp +4106 -0
  265. data/src/cxx_supportlib/vendor-modified/boost/random/faure.hpp +367 -0
  266. data/src/cxx_supportlib/vendor-modified/boost/random/niederreiter_base2.hpp +360 -0
  267. data/src/cxx_supportlib/vendor-modified/boost/random/sobol.hpp +237 -0
  268. data/src/cxx_supportlib/vendor-modified/boost/range/as_literal.hpp +43 -0
  269. data/src/cxx_supportlib/vendor-modified/boost/range/begin.hpp +13 -5
  270. data/src/cxx_supportlib/vendor-modified/boost/range/concepts.hpp +1 -1
  271. data/src/cxx_supportlib/vendor-modified/boost/range/detail/common.hpp +1 -3
  272. data/src/cxx_supportlib/vendor-modified/boost/range/detail/implementation_help.hpp +2 -2
  273. data/src/cxx_supportlib/vendor-modified/boost/range/distance.hpp +11 -5
  274. data/src/cxx_supportlib/vendor-modified/boost/range/end.hpp +14 -6
  275. data/src/cxx_supportlib/vendor-modified/boost/range/has_range_iterator.hpp +3 -3
  276. data/src/cxx_supportlib/vendor-modified/boost/ratio/config.hpp +6 -2
  277. data/src/cxx_supportlib/vendor-modified/boost/rational.hpp +55 -37
  278. data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +3 -2
  279. data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +11 -1
  280. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex.hpp +7 -1
  281. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +3 -1
  282. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +5 -2
  283. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/fileiter.hpp +0 -3
  284. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/instances.hpp +15 -4
  285. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +1 -2
  286. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_results.hpp +12 -3
  287. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +7 -2
  288. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +7 -3
  289. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +6 -2
  290. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +0 -5
  291. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_iterator.hpp +0 -8
  292. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_raw_buffer.hpp +3 -3
  293. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_split.hpp +3 -1
  294. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_token_iterator.hpp +0 -8
  295. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +12 -11
  296. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +7 -4
  297. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_iterator.hpp +1 -9
  298. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_token_iterator.hpp +2 -10
  299. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +2 -0
  300. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +60 -115
  301. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_counted_base.hpp +3 -3
  302. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +2 -1
  303. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_aix.hpp +2 -1
  304. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_clang.hpp +2 -1
  305. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +2 -1
  306. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +2 -1
  307. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +2 -1
  308. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +2 -1
  309. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +2 -1
  310. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +2 -1
  311. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +2 -1
  312. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_nt.hpp +2 -1
  313. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_pt.hpp +2 -1
  314. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +2 -1
  315. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +2 -1
  316. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_spin.hpp +2 -1
  317. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp +2 -1
  318. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_sync.hpp +2 -1
  319. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +2 -1
  320. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +3 -3
  321. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/yield_k.hpp +14 -8
  322. data/src/cxx_supportlib/vendor-modified/boost/system/config.hpp +4 -24
  323. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +57 -0
  324. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category.hpp +101 -0
  325. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_interoperability.hpp +141 -0
  326. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_posix.hpp +132 -0
  327. data/src/cxx_supportlib/vendor-modified/boost/system/error_code.hpp +775 -588
  328. data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +4 -4
  329. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/config.hpp +6 -0
  330. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/move.hpp +13 -6
  331. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/nullary_function.hpp +8 -3
  332. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +3 -1
  333. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread_safety.hpp +160 -0
  334. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/tss_hooks.hpp +2 -2
  335. data/src/cxx_supportlib/vendor-modified/boost/thread/exceptions.hpp +3 -3
  336. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/basic_thread_pool.hpp +24 -1
  337. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +10 -1
  338. data/src/cxx_supportlib/vendor-modified/boost/thread/lock_guard.hpp +4 -4
  339. data/src/cxx_supportlib/vendor-modified/boost/thread/lockable_traits.hpp +31 -0
  340. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable.hpp +2 -2
  341. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable_fwd.hpp +2 -2
  342. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/mutex.hpp +8 -53
  343. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +73 -4
  344. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/recursive_mutex.hpp +6 -6
  345. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_data.hpp +14 -9
  346. data/src/cxx_supportlib/vendor-modified/boost/thread/xtime.hpp +6 -6
  347. data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +9 -8
  348. data/src/cxx_supportlib/vendor-modified/boost/token_functions.hpp +1 -0
  349. data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +21 -19
  350. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/common_arithmetic_type.hpp +3 -1
  351. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/config.hpp +9 -0
  352. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/detector.hpp +1 -1
  353. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_postfix_operator.hpp +55 -0
  354. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_prefix_operator.hpp +72 -0
  355. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_cxx_03.hpp +108 -0
  356. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_cxx_11.hpp +501 -0
  357. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_msvc10_fix.hpp +30 -0
  358. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_likely_lambda.hpp +2 -2
  359. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_member_function_pointer_cxx_03.hpp +117 -0
  360. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_member_function_pointer_cxx_11.hpp +557 -0
  361. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_rvalue_reference_msvc10_fix.hpp +43 -0
  362. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detected.hpp +1 -1
  363. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detected_or.hpp +1 -1
  364. data/src/cxx_supportlib/vendor-modified/boost/type_traits/enable_if.hpp +37 -0
  365. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_dereference.hpp +344 -0
  366. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus.hpp +5 -0
  367. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus_assign.hpp +5 -0
  368. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_plus_assign.hpp +5 -0
  369. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_post_decrement.hpp +21 -0
  370. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_post_increment.hpp +21 -0
  371. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_pre_decrement.hpp +21 -0
  372. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_pre_increment.hpp +22 -0
  373. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_assign.hpp +1 -1
  374. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_constructor.hpp +2 -1
  375. data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_constant.hpp +5 -15
  376. data/src/cxx_supportlib/vendor-modified/boost/type_traits/intrinsics.hpp +16 -6
  377. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complete.hpp +3 -1
  378. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_copy_assignable.hpp +3 -4
  379. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_copy_constructible.hpp +4 -6
  380. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected.hpp +1 -1
  381. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected_convertible.hpp +1 -1
  382. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected_exact.hpp +1 -1
  383. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_final.hpp +1 -1
  384. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_function.hpp +4 -79
  385. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_member_function_pointer.hpp +3 -97
  386. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_noncopyable.hpp +39 -0
  387. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_assignable.hpp +2 -2
  388. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_constructible.hpp +2 -2
  389. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_rvalue_reference.hpp +4 -0
  390. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_virtual_base_of.hpp +104 -63
  391. data/src/cxx_supportlib/vendor-modified/boost/type_traits/make_void.hpp +1 -1
  392. data/src/cxx_supportlib/vendor-modified/boost/type_traits/nonesuch.hpp +1 -1
  393. data/src/cxx_supportlib/vendor-modified/boost/typeof/constant.hpp +26 -0
  394. data/src/cxx_supportlib/vendor-modified/boost/typeof/dmc/typeof_impl.hpp +4 -4
  395. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode.hpp +0 -3
  396. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode_params.hpp +1 -1
  397. data/src/cxx_supportlib/vendor-modified/boost/typeof/int_encoding.hpp +4 -5
  398. data/src/cxx_supportlib/vendor-modified/boost/typeof/modifiers.hpp +5 -5
  399. data/src/cxx_supportlib/vendor-modified/boost/typeof/msvc/typeof_impl.hpp +9 -9
  400. data/src/cxx_supportlib/vendor-modified/boost/typeof/native.hpp +3 -3
  401. data/src/cxx_supportlib/vendor-modified/boost/typeof/pointers_data_members.hpp +2 -2
  402. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions_iterate.hpp +6 -6
  403. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_mem_functions.hpp +1 -1
  404. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_encoding.hpp +4 -4
  405. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_template_param.hpp +2 -2
  406. data/src/cxx_supportlib/vendor-modified/boost/typeof/type_encoding.hpp +2 -2
  407. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof_impl.hpp +16 -16
  408. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector.hpp +5 -5
  409. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector100.hpp +201 -201
  410. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector150.hpp +301 -301
  411. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector200.hpp +401 -401
  412. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector50.hpp +101 -101
  413. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +3 -0
  414. data/src/cxx_supportlib/vendor-modified/boost/utility/string_ref.hpp +2 -0
  415. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +26 -6
  416. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  417. data/src/helper-scripts/prespawn +1 -0
  418. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +40 -0
  419. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c +26 -0
  420. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +48 -0
  421. data/src/nginx_module/Configuration.c +6 -2
  422. data/src/nginx_module/ContentHandler.c +5 -1
  423. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +15 -0
  424. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +15 -0
  425. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +28 -0
  426. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +6 -0
  427. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +11 -0
  428. data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c +11 -0
  429. data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c +23 -0
  430. data/src/nginx_module/MainConfig/AutoGeneratedStruct.h +8 -0
  431. data/src/nginx_module/ngx_http_passenger_module.c +2 -0
  432. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/logger.js +0 -0
  433. data/src/ruby_native_extension/extconf.rb +7 -0
  434. data/src/ruby_supportlib/phusion_passenger.rb +7 -7
  435. data/src/ruby_supportlib/phusion_passenger/admin_tools/instance_registry.rb +8 -0
  436. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +23 -0
  437. data/src/ruby_supportlib/phusion_passenger/constants.rb +1 -0
  438. data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +1 -3
  439. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +37 -0
  440. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +1 -1
  441. data/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb +10 -0
  442. data/src/ruby_supportlib/phusion_passenger/request_handler.rb +2 -2
  443. data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +5 -0
  444. data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +11 -0
  445. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +3 -0
  446. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/nginx_engine.rb +1 -1
  447. data/src/ruby_supportlib/phusion_passenger/utils/tee_input.rb +6 -0
  448. data/src/ruby_supportlib/phusion_passenger/utils/unseekable_socket.rb +15 -11
  449. metadata +42 -8
  450. data/src/cxx_supportlib/vendor-modified/boost/call_traits.hpp +0 -20
  451. data/src/cxx_supportlib/vendor-modified/boost/detail/call_traits.hpp +0 -172
  452. data/src/cxx_supportlib/vendor-modified/boost/detail/no_exceptions_support.hpp +0 -17
  453. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.ipp +0 -496
@@ -61,6 +61,8 @@ using ::boost::move_detail::is_nothrow_swappable;
61
61
  using ::boost::move_detail::alignment_of;
62
62
  using ::boost::move_detail::aligned_storage;
63
63
  using ::boost::move_detail::nat;
64
+ using ::boost::move_detail::nat2;
65
+ using ::boost::move_detail::nat3;
64
66
  using ::boost::move_detail::max_align_t;
65
67
 
66
68
  } //namespace dtl {
@@ -78,7 +78,7 @@ class tuple
78
78
 
79
79
 
80
80
  template<typename... Values>
81
- tuple<Values&&...> forward_as_tuple(Values&&... values)
81
+ tuple<Values&&...> forward_as_tuple_impl(Values&&... values)
82
82
  { return tuple<Values&&...>(::boost::forward<Values>(values)...); }
83
83
 
84
84
  template<int I, typename Tuple>
@@ -108,4 +108,22 @@
108
108
  #define BOOST_CONTAINER_FORCEINLINE BOOST_FORCEINLINE
109
109
  #endif
110
110
 
111
+ #if !defined(__has_feature)
112
+ #define BOOST_CONTAINER_HAS_FEATURE(feature) 0
113
+ #else
114
+ #define BOOST_CONTAINER_HAS_FEATURE(feature) __has_feature(feature)
115
+ #endif
116
+
117
+ //Detect address sanitizer
118
+ #if defined(__SANITIZE_ADDRESS__) || BOOST_CONTAINER_HAS_FEATURE(address_sanitizer)
119
+ #define BOOST_CONTAINER_ASAN
120
+ #endif
121
+
122
+
123
+ #if (__cplusplus >= 201703L)
124
+ //CTAD supported
125
+ #else
126
+ #define BOOST_CONTAINER_NO_CXX17_CTAD
127
+ #endif
128
+
111
129
  #endif //#ifndef BOOST_CONTAINER_DETAIL_WORKAROUND_HPP
@@ -319,6 +319,21 @@ class flat_map
319
319
  : m_flat_tree(ordered_range, first, last, comp, dtl::force<const impl_allocator_type>(a))
320
320
  {}
321
321
 
322
+ //! <b>Effects</b>: Constructs an empty flat_map using the specified allocator and
323
+ //! inserts elements from the ordered range [first ,last). This function
324
+ //! is more efficient than the normal range creation for ordered ranges.
325
+ //!
326
+ //! <b>Requires</b>: [first ,last) must be ordered according to the predicate.
327
+ //!
328
+ //! <b>Complexity</b>: Linear in N.
329
+ //!
330
+ //! <b>Note</b>: Non-standard extension.
331
+ template <class InputIterator>
332
+ BOOST_CONTAINER_FORCEINLINE
333
+ flat_map(ordered_unique_range_t, InputIterator first, InputIterator last, const allocator_type& a)
334
+ : m_flat_tree(ordered_range, first, last, Compare(), a)
335
+ {}
336
+
322
337
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
323
338
  //! <b>Effects</b>: Constructs an empty flat_map and
324
339
  //! inserts elements from the range [il.begin() ,il.end()).
@@ -1302,12 +1317,62 @@ class flat_map
1302
1317
  BOOST_CONTAINER_FORCEINLINE const_iterator find(const key_type& x) const
1303
1318
  { return dtl::force_copy<const_iterator>(m_flat_tree.find(x)); }
1304
1319
 
1320
+ //! <b>Requires</b>: This overload is available only if
1321
+ //! key_compare::is_transparent exists.
1322
+ //!
1323
+ //! <b>Returns</b>: An iterator pointing to an element with the key
1324
+ //! equivalent to x, or end() if such an element is not found.
1325
+ //!
1326
+ //! <b>Complexity</b>: Logarithmic.
1327
+ template<class K>
1328
+ BOOST_CONTAINER_FORCEINLINE iterator find(const K& x)
1329
+ { return dtl::force_copy<iterator>(m_flat_tree.find(x)); }
1330
+
1331
+ //! <b>Requires</b>: This overload is available only if
1332
+ //! key_compare::is_transparent exists.
1333
+ //!
1334
+ //! <b>Returns</b>: A const_iterator pointing to an element with the key
1335
+ //! equivalent to x, or end() if such an element is not found.
1336
+ //!
1337
+ //! <b>Complexity</b>: Logarithmic.
1338
+ template<class K>
1339
+ BOOST_CONTAINER_FORCEINLINE const_iterator find(const K& x) const
1340
+ { return dtl::force_copy<const_iterator>(m_flat_tree.find(x)); }
1341
+
1305
1342
  //! <b>Returns</b>: The number of elements with key equivalent to x.
1306
1343
  //!
1307
1344
  //! <b>Complexity</b>: log(size())+count(k)
1308
1345
  BOOST_CONTAINER_FORCEINLINE size_type count(const key_type& x) const
1309
1346
  { return static_cast<size_type>(m_flat_tree.find(x) != m_flat_tree.end()); }
1310
1347
 
1348
+ //! <b>Requires</b>: This overload is available only if
1349
+ //! key_compare::is_transparent exists.
1350
+ //!
1351
+ //! <b>Returns</b>: The number of elements with key equivalent to x.
1352
+ //!
1353
+ //! <b>Complexity</b>: log(size())+count(k)
1354
+ template<class K>
1355
+ BOOST_CONTAINER_FORCEINLINE size_type count(const K& x) const
1356
+ { return static_cast<size_type>(m_flat_tree.find(x) != m_flat_tree.end()); }
1357
+
1358
+ //! <b>Returns</b>: Returns true if there is an element with key
1359
+ //! equivalent to key in the container, otherwise false.
1360
+ //!
1361
+ //! <b>Complexity</b>: log(size()).
1362
+ bool contains(const key_type& x) const
1363
+ { return m_flat_tree.find(x) != m_flat_tree.end(); }
1364
+
1365
+ //! <b>Requires</b>: This overload is available only if
1366
+ //! key_compare::is_transparent exists.
1367
+ //!
1368
+ //! <b>Returns</b>: Returns true if there is an element with key
1369
+ //! equivalent to key in the container, otherwise false.
1370
+ //!
1371
+ //! <b>Complexity</b>: log(size()).
1372
+ template<typename K>
1373
+ bool contains(const K& x) const
1374
+ { return m_flat_tree.find(x) != m_flat_tree.end(); }
1375
+
1311
1376
  //! <b>Returns</b>: An iterator pointing to the first element with key not less
1312
1377
  //! than k, or a.end() if such an element is not found.
1313
1378
  //!
@@ -1322,6 +1387,28 @@ class flat_map
1322
1387
  BOOST_CONTAINER_FORCEINLINE const_iterator lower_bound(const key_type& x) const
1323
1388
  { return dtl::force_copy<const_iterator>(m_flat_tree.lower_bound(x)); }
1324
1389
 
1390
+ //! <b>Requires</b>: This overload is available only if
1391
+ //! key_compare::is_transparent exists.
1392
+ //!
1393
+ //! <b>Returns</b>: An iterator pointing to the first element with key not less
1394
+ //! than k, or a.end() if such an element is not found.
1395
+ //!
1396
+ //! <b>Complexity</b>: Logarithmic.
1397
+ template<class K>
1398
+ BOOST_CONTAINER_FORCEINLINE iterator lower_bound(const K& x)
1399
+ { return dtl::force_copy<iterator>(m_flat_tree.lower_bound(x)); }
1400
+
1401
+ //! <b>Requires</b>: This overload is available only if
1402
+ //! key_compare::is_transparent exists.
1403
+ //!
1404
+ //! <b>Returns</b>: A const iterator pointing to the first element with key not
1405
+ //! less than k, or a.end() if such an element is not found.
1406
+ //!
1407
+ //! <b>Complexity</b>: Logarithmic.
1408
+ template<class K>
1409
+ BOOST_CONTAINER_FORCEINLINE const_iterator lower_bound(const K& x) const
1410
+ { return dtl::force_copy<const_iterator>(m_flat_tree.lower_bound(x)); }
1411
+
1325
1412
  //! <b>Returns</b>: An iterator pointing to the first element with key not less
1326
1413
  //! than x, or end() if such an element is not found.
1327
1414
  //!
@@ -1336,6 +1423,28 @@ class flat_map
1336
1423
  BOOST_CONTAINER_FORCEINLINE const_iterator upper_bound(const key_type& x) const
1337
1424
  { return dtl::force_copy<const_iterator>(m_flat_tree.upper_bound(x)); }
1338
1425
 
1426
+ //! <b>Requires</b>: This overload is available only if
1427
+ //! key_compare::is_transparent exists.
1428
+ //!
1429
+ //! <b>Returns</b>: An iterator pointing to the first element with key not less
1430
+ //! than x, or end() if such an element is not found.
1431
+ //!
1432
+ //! <b>Complexity</b>: Logarithmic.
1433
+ template<class K>
1434
+ BOOST_CONTAINER_FORCEINLINE iterator upper_bound(const K& x)
1435
+ { return dtl::force_copy<iterator>(m_flat_tree.upper_bound(x)); }
1436
+
1437
+ //! <b>Requires</b>: This overload is available only if
1438
+ //! key_compare::is_transparent exists.
1439
+ //!
1440
+ //! <b>Returns</b>: A const iterator pointing to the first element with key not
1441
+ //! less than x, or end() if such an element is not found.
1442
+ //!
1443
+ //! <b>Complexity</b>: Logarithmic.
1444
+ template<class K>
1445
+ BOOST_CONTAINER_FORCEINLINE const_iterator upper_bound(const K& x) const
1446
+ { return dtl::force_copy<const_iterator>(m_flat_tree.upper_bound(x)); }
1447
+
1339
1448
  //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
1340
1449
  //!
1341
1450
  //! <b>Complexity</b>: Logarithmic.
@@ -1348,6 +1457,26 @@ class flat_map
1348
1457
  BOOST_CONTAINER_FORCEINLINE std::pair<const_iterator, const_iterator> equal_range(const key_type& x) const
1349
1458
  { return dtl::force_copy<std::pair<const_iterator,const_iterator> >(m_flat_tree.lower_bound_range(x)); }
1350
1459
 
1460
+ //! <b>Requires</b>: This overload is available only if
1461
+ //! key_compare::is_transparent exists.
1462
+ //!
1463
+ //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
1464
+ //!
1465
+ //! <b>Complexity</b>: Logarithmic.
1466
+ template<class K>
1467
+ BOOST_CONTAINER_FORCEINLINE std::pair<iterator,iterator> equal_range(const K& x)
1468
+ { return dtl::force_copy<std::pair<iterator,iterator> >(m_flat_tree.lower_bound_range(x)); }
1469
+
1470
+ //! <b>Requires</b>: This overload is available only if
1471
+ //! key_compare::is_transparent exists.
1472
+ //!
1473
+ //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
1474
+ //!
1475
+ //! <b>Complexity</b>: Logarithmic.
1476
+ template<class K>
1477
+ BOOST_CONTAINER_FORCEINLINE std::pair<const_iterator, const_iterator> equal_range(const K& x) const
1478
+ { return dtl::force_copy<std::pair<const_iterator,const_iterator> >(m_flat_tree.lower_bound_range(x)); }
1479
+
1351
1480
  //! <b>Effects</b>: Extracts the internal sequence container.
1352
1481
  //!
1353
1482
  //! <b>Complexity</b>: Same as the move constructor of sequence_type, usually constant.
@@ -1449,6 +1578,70 @@ class flat_map
1449
1578
  #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
1450
1579
  };
1451
1580
 
1581
+ #ifndef BOOST_CONTAINER_NO_CXX17_CTAD
1582
+
1583
+ template <typename InputIterator>
1584
+ flat_map(InputIterator, InputIterator) ->
1585
+ flat_map< it_based_non_const_first_type_t<InputIterator>
1586
+ , it_based_second_type_t<InputIterator>>;
1587
+
1588
+ template < typename InputIterator, typename AllocatorOrCompare>
1589
+ flat_map(InputIterator, InputIterator, AllocatorOrCompare const&) ->
1590
+ flat_map< it_based_non_const_first_type_t<InputIterator>
1591
+ , it_based_second_type_t<InputIterator>
1592
+ , typename dtl::if_c< // Compare
1593
+ dtl::is_allocator<AllocatorOrCompare>::value
1594
+ , std::less<it_based_non_const_first_type_t<InputIterator>>
1595
+ , AllocatorOrCompare
1596
+ >::type
1597
+ , typename dtl::if_c< // Allocator
1598
+ dtl::is_allocator<AllocatorOrCompare>::value
1599
+ , AllocatorOrCompare
1600
+ , new_allocator<std::pair<it_based_non_const_first_type_t<InputIterator>, it_based_second_type_t<InputIterator>>>
1601
+ >::type
1602
+ >;
1603
+
1604
+ template < typename InputIterator, typename Compare, typename Allocator
1605
+ , typename = dtl::require_nonallocator_t<Compare>
1606
+ , typename = dtl::require_allocator_t<Allocator>>
1607
+ flat_map(InputIterator, InputIterator, Compare const&, Allocator const&) ->
1608
+ flat_map< it_based_non_const_first_type_t<InputIterator>
1609
+ , it_based_second_type_t<InputIterator>
1610
+ , Compare
1611
+ , Allocator>;
1612
+
1613
+ template <typename InputIterator>
1614
+ flat_map(ordered_unique_range_t, InputIterator, InputIterator) ->
1615
+ flat_map< it_based_non_const_first_type_t<InputIterator>
1616
+ , it_based_second_type_t<InputIterator>>;
1617
+
1618
+ template < typename InputIterator, typename AllocatorOrCompare>
1619
+ flat_map(ordered_unique_range_t, InputIterator, InputIterator, AllocatorOrCompare const&) ->
1620
+ flat_map< it_based_non_const_first_type_t<InputIterator>
1621
+ , it_based_second_type_t<InputIterator>
1622
+ , typename dtl::if_c< // Compare
1623
+ dtl::is_allocator<AllocatorOrCompare>::value
1624
+ , std::less<it_based_non_const_first_type_t<InputIterator>>
1625
+ , AllocatorOrCompare
1626
+ >::type
1627
+ , typename dtl::if_c< // Allocator
1628
+ dtl::is_allocator<AllocatorOrCompare>::value
1629
+ , AllocatorOrCompare
1630
+ , new_allocator<std::pair<it_based_non_const_first_type_t<InputIterator>, it_based_second_type_t<InputIterator>>>
1631
+ >::type
1632
+ >;
1633
+
1634
+ template < typename InputIterator, typename Compare, typename Allocator
1635
+ , typename = dtl::require_nonallocator_t<Compare>
1636
+ , typename = dtl::require_allocator_t<Allocator>>
1637
+ flat_map(ordered_unique_range_t, InputIterator, InputIterator, Compare const&, Allocator const&) ->
1638
+ flat_map< it_based_non_const_first_type_t<InputIterator>
1639
+ , it_based_second_type_t<InputIterator>
1640
+ , Compare
1641
+ , Allocator>;
1642
+
1643
+ #endif
1644
+
1452
1645
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
1453
1646
 
1454
1647
  } //namespace container {
@@ -1710,6 +1903,21 @@ class flat_multimap
1710
1903
  : m_flat_tree(ordered_range, first, last, comp, a)
1711
1904
  {}
1712
1905
 
1906
+ //! <b>Effects</b>: Constructs an empty flat_multimap using the specified comparison object and
1907
+ //! inserts elements from the ordered range [first ,last). This function
1908
+ //! is more efficient than the normal range creation for ordered ranges.
1909
+ //!
1910
+ //! <b>Requires</b>: [first ,last) must be ordered according to the predicate.
1911
+ //!
1912
+ //! <b>Complexity</b>: Linear in N.
1913
+ //!
1914
+ //! <b>Note</b>: Non-standard extension.
1915
+ template <class InputIterator>
1916
+ BOOST_CONTAINER_FORCEINLINE
1917
+ flat_multimap(ordered_range_t, InputIterator first, InputIterator last, const allocator_type &a)
1918
+ : m_flat_tree(ordered_range, first, last, Compare(), a)
1919
+ {}
1920
+
1713
1921
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
1714
1922
  //! <b>Effects</b>: Constructs an empty flat_map and
1715
1923
  //! inserts elements from the range [il.begin(), il.end()).
@@ -2443,12 +2651,62 @@ class flat_multimap
2443
2651
  BOOST_CONTAINER_FORCEINLINE const_iterator find(const key_type& x) const
2444
2652
  { return dtl::force_copy<const_iterator>(m_flat_tree.find(x)); }
2445
2653
 
2654
+ //! <b>Requires</b>: This overload is available only if
2655
+ //! key_compare::is_transparent exists.
2656
+ //!
2657
+ //! <b>Returns</b>: An iterator pointing to an element with the key
2658
+ //! equivalent to x, or end() if such an element is not found.
2659
+ //!
2660
+ //! <b>Complexity</b>: Logarithmic.
2661
+ template<class K>
2662
+ BOOST_CONTAINER_FORCEINLINE iterator find(const K& x)
2663
+ { return dtl::force_copy<iterator>(m_flat_tree.find(x)); }
2664
+
2665
+ //! <b>Requires</b>: This overload is available only if
2666
+ //! key_compare::is_transparent exists.
2667
+ //!
2668
+ //! <b>Returns</b>: An const_iterator pointing to an element with the key
2669
+ //! equivalent to x, or end() if such an element is not found.
2670
+ //!
2671
+ //! <b>Complexity</b>: Logarithmic.
2672
+ template<class K>
2673
+ BOOST_CONTAINER_FORCEINLINE const_iterator find(const K& x) const
2674
+ { return dtl::force_copy<const_iterator>(m_flat_tree.find(x)); }
2675
+
2446
2676
  //! <b>Returns</b>: The number of elements with key equivalent to x.
2447
2677
  //!
2448
2678
  //! <b>Complexity</b>: log(size())+count(k)
2449
2679
  BOOST_CONTAINER_FORCEINLINE size_type count(const key_type& x) const
2450
2680
  { return m_flat_tree.count(x); }
2451
2681
 
2682
+ //! <b>Requires</b>: This overload is available only if
2683
+ //! key_compare::is_transparent exists.
2684
+ //!
2685
+ //! <b>Returns</b>: The number of elements with key equivalent to x.
2686
+ //!
2687
+ //! <b>Complexity</b>: log(size())+count(k)
2688
+ template<class K>
2689
+ BOOST_CONTAINER_FORCEINLINE size_type count(const K& x) const
2690
+ { return m_flat_tree.count(x); }
2691
+
2692
+ //! <b>Returns</b>: Returns true if there is an element with key
2693
+ //! equivalent to key in the container, otherwise false.
2694
+ //!
2695
+ //! <b>Complexity</b>: log(size()).
2696
+ bool contains(const key_type& x) const
2697
+ { return m_flat_tree.find(x) != m_flat_tree.end(); }
2698
+
2699
+ //! <b>Requires</b>: This overload is available only if
2700
+ //! key_compare::is_transparent exists.
2701
+ //!
2702
+ //! <b>Returns</b>: Returns true if there is an element with key
2703
+ //! equivalent to key in the container, otherwise false.
2704
+ //!
2705
+ //! <b>Complexity</b>: log(size()).
2706
+ template<typename K>
2707
+ bool contains(const K& x) const
2708
+ { return m_flat_tree.find(x) != m_flat_tree.end(); }
2709
+
2452
2710
  //! <b>Returns</b>: An iterator pointing to the first element with key not less
2453
2711
  //! than k, or a.end() if such an element is not found.
2454
2712
  //!
@@ -2456,12 +2714,34 @@ class flat_multimap
2456
2714
  BOOST_CONTAINER_FORCEINLINE iterator lower_bound(const key_type& x)
2457
2715
  { return dtl::force_copy<iterator>(m_flat_tree.lower_bound(x)); }
2458
2716
 
2459
- //! <b>Returns</b>: A const iterator pointing to the first element with key
2460
- //! not less than k, or a.end() if such an element is not found.
2717
+ //! <b>Returns</b>: An iterator pointing to the first element with key not less
2718
+ //! than k, or a.end() if such an element is not found.
2461
2719
  //!
2462
2720
  //! <b>Complexity</b>: Logarithmic
2463
2721
  BOOST_CONTAINER_FORCEINLINE const_iterator lower_bound(const key_type& x) const
2464
- { return dtl::force_copy<const_iterator>(m_flat_tree.lower_bound(x)); }
2722
+ { return dtl::force_copy<const_iterator>(m_flat_tree.lower_bound(x)); }
2723
+
2724
+ //! <b>Requires</b>: This overload is available only if
2725
+ //! key_compare::is_transparent exists.
2726
+ //!
2727
+ //! <b>Returns</b>: An iterator pointing to the first element with key not less
2728
+ //! than k, or a.end() if such an element is not found.
2729
+ //!
2730
+ //! <b>Complexity</b>: Logarithmic
2731
+ template<class K>
2732
+ BOOST_CONTAINER_FORCEINLINE iterator lower_bound(const K& x)
2733
+ { return dtl::force_copy<iterator>(m_flat_tree.lower_bound(x)); }
2734
+
2735
+ //! <b>Requires</b>: This overload is available only if
2736
+ //! key_compare::is_transparent exists.
2737
+ //!
2738
+ //! <b>Returns</b>: An iterator pointing to the first element with key not less
2739
+ //! than k, or a.end() if such an element is not found.
2740
+ //!
2741
+ //! <b>Complexity</b>: Logarithmic
2742
+ template<class K>
2743
+ BOOST_CONTAINER_FORCEINLINE const_iterator lower_bound(const K& x) const
2744
+ { return dtl::force_copy<const_iterator>(m_flat_tree.lower_bound(x)); }
2465
2745
 
2466
2746
  //! <b>Returns</b>: An iterator pointing to the first element with key not less
2467
2747
  //! than x, or end() if such an element is not found.
@@ -2477,6 +2757,28 @@ class flat_multimap
2477
2757
  BOOST_CONTAINER_FORCEINLINE const_iterator upper_bound(const key_type& x) const
2478
2758
  { return dtl::force_copy<const_iterator>(m_flat_tree.upper_bound(x)); }
2479
2759
 
2760
+ //! <b>Requires</b>: This overload is available only if
2761
+ //! key_compare::is_transparent exists.
2762
+ //!
2763
+ //! <b>Returns</b>: An iterator pointing to the first element with key not less
2764
+ //! than x, or end() if such an element is not found.
2765
+ //!
2766
+ //! <b>Complexity</b>: Logarithmic
2767
+ template<class K>
2768
+ BOOST_CONTAINER_FORCEINLINE iterator upper_bound(const K& x)
2769
+ {return dtl::force_copy<iterator>(m_flat_tree.upper_bound(x)); }
2770
+
2771
+ //! <b>Requires</b>: This overload is available only if
2772
+ //! key_compare::is_transparent exists.
2773
+ //!
2774
+ //! <b>Returns</b>: A const iterator pointing to the first element with key
2775
+ //! not less than x, or end() if such an element is not found.
2776
+ //!
2777
+ //! <b>Complexity</b>: Logarithmic
2778
+ template<class K>
2779
+ BOOST_CONTAINER_FORCEINLINE const_iterator upper_bound(const K& x) const
2780
+ { return dtl::force_copy<const_iterator>(m_flat_tree.upper_bound(x)); }
2781
+
2480
2782
  //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
2481
2783
  //!
2482
2784
  //! <b>Complexity</b>: Logarithmic
@@ -2489,6 +2791,26 @@ class flat_multimap
2489
2791
  BOOST_CONTAINER_FORCEINLINE std::pair<const_iterator, const_iterator> equal_range(const key_type& x) const
2490
2792
  { return dtl::force_copy<std::pair<const_iterator,const_iterator> >(m_flat_tree.equal_range(x)); }
2491
2793
 
2794
+ //! <b>Requires</b>: This overload is available only if
2795
+ //! key_compare::is_transparent exists.
2796
+ //!
2797
+ //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
2798
+ //!
2799
+ //! <b>Complexity</b>: Logarithmic
2800
+ template<class K>
2801
+ BOOST_CONTAINER_FORCEINLINE std::pair<iterator,iterator> equal_range(const K& x)
2802
+ { return dtl::force_copy<std::pair<iterator,iterator> >(m_flat_tree.equal_range(x)); }
2803
+
2804
+ //! <b>Requires</b>: This overload is available only if
2805
+ //! key_compare::is_transparent exists.
2806
+ //!
2807
+ //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
2808
+ //!
2809
+ //! <b>Complexity</b>: Logarithmic
2810
+ template<class K>
2811
+ BOOST_CONTAINER_FORCEINLINE std::pair<const_iterator, const_iterator> equal_range(const K& x) const
2812
+ { return dtl::force_copy<std::pair<const_iterator,const_iterator> >(m_flat_tree.equal_range(x)); }
2813
+
2492
2814
  //! <b>Effects</b>: Extracts the internal sequence container.
2493
2815
  //!
2494
2816
  //! <b>Complexity</b>: Same as the move constructor of sequence_type, usually constant.
@@ -2564,6 +2886,70 @@ class flat_multimap
2564
2886
  { x.swap(y); }
2565
2887
  };
2566
2888
 
2889
+ #ifndef BOOST_CONTAINER_NO_CXX17_CTAD
2890
+
2891
+ template <typename InputIterator>
2892
+ flat_multimap(InputIterator, InputIterator) ->
2893
+ flat_multimap< it_based_non_const_first_type_t<InputIterator>
2894
+ , it_based_second_type_t<InputIterator>>;
2895
+
2896
+ template < typename InputIterator, typename AllocatorOrCompare>
2897
+ flat_multimap(InputIterator, InputIterator, AllocatorOrCompare const&) ->
2898
+ flat_multimap< it_based_non_const_first_type_t<InputIterator>
2899
+ , it_based_second_type_t<InputIterator>
2900
+ , typename dtl::if_c< // Compare
2901
+ dtl::is_allocator<AllocatorOrCompare>::value
2902
+ , std::less<it_based_non_const_first_type_t<InputIterator>>
2903
+ , AllocatorOrCompare
2904
+ >::type
2905
+ , typename dtl::if_c< // Allocator
2906
+ dtl::is_allocator<AllocatorOrCompare>::value
2907
+ , AllocatorOrCompare
2908
+ , new_allocator<std::pair<it_based_non_const_first_type_t<InputIterator>, it_based_second_type_t<InputIterator>>>
2909
+ >::type
2910
+ >;
2911
+
2912
+ template < typename InputIterator, typename Compare, typename Allocator
2913
+ , typename = dtl::require_nonallocator_t<Compare>
2914
+ , typename = dtl::require_allocator_t<Allocator>>
2915
+ flat_multimap(InputIterator, InputIterator, Compare const&, Allocator const&) ->
2916
+ flat_multimap< it_based_non_const_first_type_t<InputIterator>
2917
+ , it_based_second_type_t<InputIterator>
2918
+ , Compare
2919
+ , Allocator>;
2920
+
2921
+ template <typename InputIterator>
2922
+ flat_multimap(ordered_range_t, InputIterator, InputIterator) ->
2923
+ flat_multimap< it_based_non_const_first_type_t<InputIterator>
2924
+ , it_based_second_type_t<InputIterator>>;
2925
+
2926
+ template < typename InputIterator, typename AllocatorOrCompare>
2927
+ flat_multimap(ordered_range_t, InputIterator, InputIterator, AllocatorOrCompare const&) ->
2928
+ flat_multimap< it_based_non_const_first_type_t<InputIterator>
2929
+ , it_based_second_type_t<InputIterator>
2930
+ , typename dtl::if_c< // Compare
2931
+ dtl::is_allocator<AllocatorOrCompare>::value
2932
+ , std::less<it_based_non_const_first_type_t<InputIterator>>
2933
+ , AllocatorOrCompare
2934
+ >::type
2935
+ , typename dtl::if_c< // Allocator
2936
+ dtl::is_allocator<AllocatorOrCompare>::value
2937
+ , AllocatorOrCompare
2938
+ , new_allocator<std::pair<it_based_non_const_first_type_t<InputIterator>, it_based_second_type_t<InputIterator>>>
2939
+ >::type
2940
+ >;
2941
+
2942
+ template < typename InputIterator, typename Compare, typename Allocator
2943
+ , typename = dtl::require_nonallocator_t<Compare>
2944
+ , typename = dtl::require_allocator_t<Allocator>>
2945
+ flat_multimap(ordered_range_t, InputIterator, InputIterator, Compare const&, Allocator const&) ->
2946
+ flat_multimap< it_based_non_const_first_type_t<InputIterator>
2947
+ , it_based_second_type_t<InputIterator>
2948
+ , Compare
2949
+ , Allocator>;
2950
+
2951
+ #endif
2952
+
2567
2953
  }}
2568
2954
 
2569
2955
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED