passenger 6.2.1 → 6.2.2

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 (270) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +37 -15
  3. data/build/cxx_tests.rb +2 -0
  4. data/build/support/cxx_dependency_map.rb +3 -63
  5. data/src/agent/Core/Config.h +1 -1
  6. data/src/agent/Core/Controller/Config.h +1 -1
  7. data/src/agent/Shared/ApiServerUtils.h +1 -1
  8. data/src/agent/Watchdog/Config.h +1 -1
  9. data/src/apache2_module/Hooks.cpp +13 -0
  10. data/src/apache2_module/Utils.h +14 -0
  11. data/src/cxx_supportlib/Constants.h +1 -1
  12. data/src/cxx_supportlib/FileTools/FileManip.cpp +27 -3
  13. data/src/cxx_supportlib/InstanceDirectory.h +30 -3
  14. data/src/cxx_supportlib/ServerKit/Errors.h +1 -1
  15. data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +1 -1
  16. data/src/cxx_supportlib/ServerKit/HttpHeaderParserState.h +1 -1
  17. data/src/cxx_supportlib/ServerKit/HttpRequest.h +1 -1
  18. data/src/cxx_supportlib/ServerKit/llerrors.h +3 -3
  19. data/src/cxx_supportlib/ServerKit/llversion.h +1 -1
  20. data/src/cxx_supportlib/{ServerKit/llhttp_api.c → vendor-copy/llhttp/api.c} +30 -23
  21. data/src/cxx_supportlib/{ServerKit → vendor-copy/llhttp}/llhttp.c +1756 -1645
  22. data/src/cxx_supportlib/{ServerKit → vendor-copy/llhttp}/llhttp.h +35 -13
  23. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/classification.hpp +19 -0
  24. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/formatter.hpp +1 -1
  25. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/trim_all.hpp +0 -2
  26. data/src/cxx_supportlib/vendor-modified/boost/assert.hpp +20 -13
  27. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_x86.hpp +2 -2
  28. data/src/cxx_supportlib/vendor-modified/boost/atomic/thread_pause.hpp +4 -0
  29. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn.hpp +1 -1
  30. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/debug.hpp +4 -0
  31. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx03.hpp +1 -1
  32. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx11.hpp +1 -1
  33. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx14.hpp +1 -1
  34. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx17.hpp +1 -1
  35. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx20.hpp +1 -1
  36. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx23.hpp +1 -1
  37. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +6 -1
  38. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang_version.hpp +10 -1
  39. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +5 -3
  40. data/src/cxx_supportlib/vendor-modified/boost/config/detail/cxx_composite.hpp +1 -1
  41. data/src/cxx_supportlib/vendor-modified/boost/config/workaround.hpp +5 -0
  42. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +57 -53
  43. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +10 -10
  44. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +34 -2
  45. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +14 -2
  46. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +176 -2287
  47. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +13 -9
  48. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +186 -70
  49. data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithm.hpp +2 -2
  50. data/src/cxx_supportlib/vendor-modified/boost/container/detail/aligned_allocation.hpp +149 -0
  51. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +35 -0
  52. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_lib.h +1 -0
  53. data/src/cxx_supportlib/vendor-modified/boost/container/detail/bit_utilities.hpp +133 -0
  54. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +18 -3
  55. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +5 -0
  56. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_end.hpp +4 -0
  57. data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_rebind.hpp +1 -1
  58. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +20 -10
  59. data/src/cxx_supportlib/vendor-modified/boost/container/detail/deque_impl.hpp +2744 -0
  60. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +202 -104
  61. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dlmalloc.hpp +5 -4
  62. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +161 -85
  63. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_constructible.hpp +180 -0
  64. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +3 -2
  65. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +12 -0
  66. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +16 -0
  67. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +1 -1
  68. data/src/cxx_supportlib/vendor-modified/boost/container/detail/next_capacity.hpp +9 -1
  69. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +18 -14
  70. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +256 -41
  71. data/src/cxx_supportlib/vendor-modified/boost/container/detail/operator_new_helpers.hpp +75 -24
  72. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +1 -56
  73. data/src/cxx_supportlib/vendor-modified/boost/container/detail/placement_new.hpp +16 -3
  74. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +1 -7
  75. data/src/cxx_supportlib/vendor-modified/boost/container/detail/range_utils.hpp +196 -0
  76. data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +33 -1
  77. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +124 -69
  78. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +109 -7
  79. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +168 -162
  80. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/nest.hpp +2978 -0
  81. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/pmr/nest.hpp +45 -0
  82. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_all_of.hpp +43 -0
  83. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_any_of.hpp +42 -0
  84. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_copy.hpp +229 -0
  85. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_copy_if.hpp +270 -0
  86. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_copy_n.hpp +308 -0
  87. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_count.hpp +101 -0
  88. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_count_if.hpp +100 -0
  89. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_equal.hpp +268 -0
  90. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_fill.hpp +101 -0
  91. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_fill_n.hpp +171 -0
  92. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find.hpp +110 -0
  93. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_if.hpp +110 -0
  94. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_if_not.hpp +43 -0
  95. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_last.hpp +179 -0
  96. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_last_if.hpp +179 -0
  97. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_last_if_not.hpp +43 -0
  98. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_for_each.hpp +92 -0
  99. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_generate.hpp +90 -0
  100. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_generate_n.hpp +162 -0
  101. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_is_partitioned.hpp +46 -0
  102. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_is_sorted.hpp +49 -0
  103. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_is_sorted_until.hpp +169 -0
  104. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_iterator_traits.hpp +382 -0
  105. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_merge.hpp +428 -0
  106. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_mismatch.hpp +350 -0
  107. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_none_of.hpp +98 -0
  108. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_partition.hpp +296 -0
  109. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_partition_copy.hpp +105 -0
  110. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_partition_point.hpp +116 -0
  111. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove.hpp +57 -0
  112. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove_copy.hpp +207 -0
  113. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove_copy_if.hpp +223 -0
  114. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove_if.hpp +57 -0
  115. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_replace.hpp +90 -0
  116. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_replace_if.hpp +90 -0
  117. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_reverse.hpp +245 -0
  118. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_reverse_copy.hpp +229 -0
  119. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_search.hpp +211 -0
  120. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_search_n.hpp +476 -0
  121. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_difference.hpp +300 -0
  122. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_intersection.hpp +287 -0
  123. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_symmetric_difference.hpp +306 -0
  124. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_union.hpp +294 -0
  125. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_stable_partition.hpp +153 -0
  126. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_swap_ranges.hpp +92 -0
  127. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_transform.hpp +93 -0
  128. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/wrapped_iterator.hpp +142 -0
  129. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +642 -417
  130. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +141 -30
  131. data/src/cxx_supportlib/vendor-modified/boost/container/hub.hpp +2426 -0
  132. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +65 -57
  133. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +247 -68
  134. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +7 -0
  135. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +39 -33
  136. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +156 -23
  137. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/global_resource.hpp +3 -3
  138. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/hub.hpp +43 -0
  139. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +5 -3
  140. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +1 -0
  141. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +1 -1
  142. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +4 -0
  143. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/segtor.hpp +45 -0
  144. data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +5 -4
  145. data/src/cxx_supportlib/vendor-modified/boost/container/segtor.hpp +905 -0
  146. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +148 -35
  147. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +59 -52
  148. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +632 -5
  149. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +66 -60
  150. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +46 -1
  151. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +612 -317
  152. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +54 -111
  153. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator_construction.hpp +100 -0
  154. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator_fwd.hpp +1 -3
  155. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +233 -116
  156. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +5 -1
  157. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +17 -10
  158. data/src/cxx_supportlib/vendor-modified/boost/date_time/period.hpp +1 -3
  159. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +16 -0
  160. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/encoder.hpp +114 -0
  161. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +4 -0
  162. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/requires_cxx11.hpp +1 -1
  163. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/type_info.hpp +211 -1
  164. data/src/cxx_supportlib/vendor-modified/boost/exception/diagnostic_information.hpp +59 -0
  165. data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +6 -0
  166. data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +34 -0
  167. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +0 -1
  168. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +12 -3
  169. data/src/cxx_supportlib/vendor-modified/boost/intrusive/derivation_value_traits.hpp +1 -1
  170. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +29 -174
  171. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +18 -2
  172. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/key_nodeptr_comp.hpp +0 -1
  173. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +4 -5
  174. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +20 -11
  175. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +42 -14
  176. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +58 -22
  177. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +3 -1
  178. data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +5 -1
  179. data/src/cxx_supportlib/vendor-modified/boost/iterator/distance.hpp +8 -2
  180. data/src/cxx_supportlib/vendor-modified/boost/iterator/is_iterator.hpp +9 -0
  181. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +11 -1
  182. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/buffer_view.hpp +9 -1
  183. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/config.hpp +22 -0
  184. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +15 -7
  185. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +23 -11
  186. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +11 -1
  187. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +9 -1
  188. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +11 -2
  189. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_basic_unlockedbuf.hpp +10 -1
  190. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +8 -1
  191. data/src/cxx_supportlib/vendor-modified/boost/{detail → lexical_cast/detail}/lcast_precision.hpp +13 -1
  192. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +11 -1
  193. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +10 -2
  194. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +15 -2
  195. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +11 -1
  196. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once_atomic.cpp +1 -1
  197. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +48 -46
  198. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +23 -0
  199. data/src/cxx_supportlib/vendor-modified/boost/move/detail/move_helpers.hpp +24 -24
  200. data/src/cxx_supportlib/vendor-modified/boost/move/detail/nsec_clock.hpp +12 -4
  201. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +76 -0
  202. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +1 -1
  203. data/src/cxx_supportlib/vendor-modified/boost/move/traits.hpp +11 -0
  204. data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +58 -37
  205. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_copy_if.hpp +1 -2
  206. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +17 -9
  207. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_remove_if.hpp +1 -2
  208. data/src/cxx_supportlib/vendor-modified/boost/mp11/integer_sequence.hpp +6 -0
  209. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
  210. data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +6 -1
  211. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_common_defs.hpp +188 -0
  212. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_factory_support.hpp +0 -6
  213. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_hash.hpp +1 -1
  214. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_nonmember_interface.hpp +117 -0
  215. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +108 -83
  216. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +39 -39
  217. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_select_implementation.hpp +37 -0
  218. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_swap.hpp +1 -1
  219. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +8 -8
  220. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/union_optional.hpp +724 -0
  221. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +93 -220
  222. data/src/cxx_supportlib/vendor-modified/boost/optional/optional_fwd.hpp +14 -4
  223. data/src/cxx_supportlib/vendor-modified/boost/optional/optional_io.hpp +1 -1
  224. data/src/cxx_supportlib/vendor-modified/boost/random/binomial_distribution.hpp +1 -1
  225. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_int_distribution.hpp +1 -1
  226. data/src/cxx_supportlib/vendor-modified/boost/rational.hpp +1 -1
  227. data/src/cxx_supportlib/vendor-modified/boost/static_assert.hpp +4 -6
  228. data/src/cxx_supportlib/vendor-modified/boost/system/api_config.hpp +1 -1
  229. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +16 -0
  230. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +13 -13
  231. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +5 -5
  232. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_deque_base.hpp +3 -2
  233. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_queue_base.hpp +3 -2
  234. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +2 -1
  235. data/src/cxx_supportlib/vendor-modified/boost/thread/experimental/parallel/v2/task_region.hpp +1 -1
  236. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +30 -28
  237. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/once.hpp +6 -3
  238. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/once_atomic.hpp +5 -1
  239. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_helpers.hpp +1 -0
  240. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/shared_mutex.hpp +16 -16
  241. data/src/cxx_supportlib/vendor-modified/boost/thread/v2/shared_mutex.hpp +26 -26
  242. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +196 -6
  243. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +191 -6
  244. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_node_map.hpp +196 -5
  245. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_node_set.hpp +192 -5
  246. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +3 -3
  247. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +2 -2
  248. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +3 -3
  249. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +52 -16
  250. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/ranges_support.hpp +104 -0
  251. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/type_traits.hpp +1 -14
  252. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/unordered_printers.hpp +10 -4
  253. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +121 -3
  254. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +118 -3
  255. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +338 -1
  256. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +121 -3
  257. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +118 -3
  258. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +333 -1
  259. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  260. data/src/cxx_supportlib/vendor-modified/jsoncpp/json-forwards.h +276 -143
  261. data/src/cxx_supportlib/vendor-modified/jsoncpp/json.h +1262 -771
  262. data/src/cxx_supportlib/vendor-modified/jsoncpp/jsoncpp.cpp +1704 -1586
  263. data/src/nginx_module/ContentHandler.c +35 -0
  264. data/src/ruby_supportlib/phusion_passenger/common_library.rb +6 -6
  265. data/src/ruby_supportlib/phusion_passenger/utils/json.rb +25 -2
  266. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller.rb +12 -1
  267. data/src/ruby_supportlib/phusion_passenger.rb +1 -1
  268. metadata +73 -8
  269. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_utility.hpp +0 -41
  270. /data/src/cxx_supportlib/{ServerKit/llhttp_http.c → vendor-copy/llhttp/http.c} +0 -0
@@ -104,7 +104,7 @@ class map
104
104
  typedef Key key_type;
105
105
  typedef T mapped_type;
106
106
  typedef typename base_t::allocator_type allocator_type;
107
- typedef ::boost::container::allocator_traits<allocator_type> allocator_traits_type;
107
+ typedef boost::container::allocator_traits<allocator_type> allocator_traits_type;
108
108
  typedef typename boost::container::allocator_traits<allocator_type>::value_type value_type;
109
109
  typedef typename boost::container::allocator_traits<allocator_type>::pointer pointer;
110
110
  typedef typename boost::container::allocator_traits<allocator_type>::const_pointer const_pointer;
@@ -371,7 +371,7 @@ class map
371
371
  //! <b>Effects</b>: Copy constructs a map using the specified allocator.
372
372
  //!
373
373
  //! <b>Complexity</b>: Linear in x.size().
374
- inline map(const map& x, const allocator_type &a)
374
+ inline map(const map& x, const BOOST_CONTAINER_DOC1ST(allocator_type, typename dtl::type_identity<allocator_type>::type) &a)
375
375
  : base_t(static_cast<const base_t&>(x), a)
376
376
  {}
377
377
 
@@ -381,7 +381,7 @@ class map
381
381
  //! <b>Complexity</b>: Constant if x == x.get_allocator(), linear otherwise.
382
382
  //!
383
383
  //! <b>Postcondition</b>: x is emptied.
384
- inline map(BOOST_RV_REF(map) x, const allocator_type &a)
384
+ inline map(BOOST_RV_REF(map) x, const BOOST_CONTAINER_DOC1ST(allocator_type, typename dtl::type_identity<allocator_type>::type) &a)
385
385
  : base_t(BOOST_MOVE_BASE(base_t, x), a)
386
386
  {}
387
387
 
@@ -555,26 +555,41 @@ class map
555
555
 
556
556
  #endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
557
557
 
558
- #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
558
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) || (defined(BOOST_CXX_VERSION) &&(BOOST_CXX_VERSION >= 201103L))
559
+ //! <b>Effects</b>: If there is no key equivalent to x in the map, inserts
560
+ //! value_type(k, T()) into the map.
561
+ //!
562
+ //! <b>Returns</b>: A reference to the mapped_type corresponding to k in *this.
563
+ //!
564
+ //! <b>Complexity</b>: Logarithmic.
565
+ mapped_type& operator[](const key_type& k)
566
+ { return this->priv_subscript(k); }
567
+
559
568
  //! <b>Effects</b>: If there is no key equivalent to x in the map, inserts
560
- //! value_type(x, T()) into the map.
569
+ //! value_type(boost::move(k), T()) into the map (the key is move-constructed)
561
570
  //!
562
- //! <b>Returns</b>: A reference to the mapped_type corresponding to x in *this.
571
+ //! <b>Returns</b>: A reference to the mapped_type corresponding to k in *this.
563
572
  //!
564
573
  //! <b>Complexity</b>: Logarithmic.
565
- mapped_type& operator[](const key_type &k);
574
+ mapped_type& operator[](key_type&& k)
575
+ { return this->priv_subscript(boost::move(k)); }
566
576
 
577
+ //! <b>Precondition</b>: This overload is available only if key_compare::is_transparent exists.
578
+ //!
567
579
  //! <b>Effects</b>: If there is no key equivalent to x in the map, inserts
568
- //! value_type(boost::move(x), T()) into the map (the key is move-constructed)
580
+ //! value_type(boost::forward<K>(k), T()) into the map
569
581
  //!
570
- //! <b>Returns</b>: A reference to the mapped_type corresponding to x in *this.
582
+ //! <b>Returns</b>: A reference to the mapped_type corresponding to k in *this.
571
583
  //!
572
584
  //! <b>Complexity</b>: Logarithmic.
573
- mapped_type& operator[](key_type &&k);
574
- #elif defined(BOOST_MOVE_HELPERS_RETURN_SFINAE_BROKEN)
575
- //in compilers like GCC 3.4, we can't catch temporaries
576
- inline mapped_type& operator[](const key_type &k) { return this->priv_subscript(k); }
577
- inline mapped_type& operator[](BOOST_RV_REF(key_type) k) { return this->priv_subscript(::boost::move(k)); }
585
+ template <class K>
586
+ inline BOOST_CONTAINER_DOC1ST
587
+ ( mapped_type&
588
+ , typename dtl::enable_if_transparent<key_compare BOOST_MOVE_I K BOOST_MOVE_I mapped_type&>::type
589
+ )
590
+ operator[](K&& k)
591
+ { return this->priv_subscript(boost::forward<K>(k)); }
592
+
578
593
  #else
579
594
  BOOST_MOVE_CONVERSION_AWARE_CATCH( operator[] , key_type, mapped_type&, this->priv_subscript)
580
595
  #endif
@@ -593,7 +608,7 @@ class map
593
608
  //! <b>Complexity</b>: Logarithmic in the size of the container.
594
609
  template <class M>
595
610
  inline std::pair<iterator, bool> insert_or_assign(const key_type& k, BOOST_FWD_REF(M) obj)
596
- { return this->base_t::insert_or_assign(const_iterator(), k, ::boost::forward<M>(obj)); }
611
+ { return this->base_t::insert_or_assign(k, ::boost::forward<M>(obj)); }
597
612
 
598
613
  //! <b>Effects</b>: If a key equivalent to k already exists in the container, assigns forward<M>(obj)
599
614
  //! to the mapped_type corresponding to the key k. If the key does not exist, inserts the new value
@@ -609,7 +624,7 @@ class map
609
624
  //! <b>Complexity</b>: Logarithmic in the size of the container.
610
625
  template <class M>
611
626
  inline std::pair<iterator, bool> insert_or_assign(BOOST_RV_REF(key_type) k, BOOST_FWD_REF(M) obj)
612
- { return this->base_t::insert_or_assign(const_iterator(), ::boost::move(k), ::boost::forward<M>(obj)); }
627
+ { return this->base_t::insert_or_assign(::boost::move(k), ::boost::forward<M>(obj)); }
613
628
 
614
629
  //! <b>Requires</b>: This overload is available only if key_compare::is_transparent exists.
615
630
  //!
@@ -634,7 +649,7 @@ class map
634
649
  BOOST_MOVE_I std::pair<iterator BOOST_MOVE_I bool>
635
650
  >::type) //transparent
636
651
  insert_or_assign(BOOST_FWD_REF(K) k, BOOST_FWD_REF(M) obj)
637
- { return this->base_t::insert_or_assign(const_iterator(), ::boost::forward<K>(k), ::boost::forward<M>(obj)); }
652
+ { return this->base_t::insert_or_assign(::boost::forward<K>(k), ::boost::forward<M>(obj)); }
638
653
 
639
654
  //! <b>Effects</b>: If a key equivalent to k already exists in the container, assigns forward<M>(obj)
640
655
  //! to the mapped_type corresponding to the key k. If the key does not exist, inserts the new value
@@ -698,7 +713,7 @@ class map
698
713
  //! <b>Returns</b>: A reference to the element whose key is equivalent to x.
699
714
  //! Throws: An exception object of type out_of_range if no such element is present.
700
715
  //! <b>Complexity</b>: logarithmic.
701
- T& at(const key_type& k)
716
+ BOOST_CONTAINER_NODISCARD T& at(const key_type& k)
702
717
  {
703
718
  iterator i = this->find(k);
704
719
  if(i == this->end()){
@@ -710,15 +725,63 @@ class map
710
725
  //! <b>Returns</b>: A reference to the element whose key is equivalent to x.
711
726
  //! Throws: An exception object of type out_of_range if no such element is present.
712
727
  //! <b>Complexity</b>: logarithmic.
713
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD const T& at(const key_type& k) const
728
+ BOOST_CONTAINER_NODISCARD const T& at(const key_type& k) const
714
729
  {
715
730
  const_iterator i = this->find(k);
731
+ if(i == this->cend()){
732
+ throw_out_of_range("map::at key not found");
733
+ }
734
+ return i->second;
735
+ }
736
+
737
+ //! <b>Precondition</b>: This overload is available only if key_compare::is_transparent exists.
738
+ //!
739
+ //! Returns: A reference to the element whose key is equivalent to x.
740
+ //!
741
+ //! Throws: An exception object of type out_of_range if no such element is present.
742
+ //!
743
+ //! Complexity: logarithmic.
744
+ template<class K>
745
+ BOOST_CONTAINER_NODISCARD
746
+ BOOST_CONTAINER_DOC1ST
747
+ ( T&
748
+ , typename dtl::enable_if_transparent< key_compare
749
+ BOOST_MOVE_I K
750
+ BOOST_MOVE_I T&
751
+ >::type) //transparent
752
+ at(const K& k)
753
+ {
754
+ iterator i = this->find(k);
716
755
  if(i == this->end()){
717
756
  throw_out_of_range("map::at key not found");
718
757
  }
719
758
  return i->second;
720
759
  }
721
760
 
761
+ //! <b>Precondition</b>: This overload is available only if key_compare::is_transparent exists.
762
+ //!
763
+ //! Returns: A reference to the element whose key is equivalent to x.
764
+ //!
765
+ //! Throws: An exception object of type out_of_range if no such element is present.
766
+ //!
767
+ //! Complexity: logarithmic.
768
+ template<class K>
769
+ BOOST_CONTAINER_NODISCARD
770
+ BOOST_CONTAINER_DOC1ST
771
+ ( const T&
772
+ , typename dtl::enable_if_transparent< key_compare
773
+ BOOST_MOVE_I K
774
+ BOOST_MOVE_I const T&
775
+ >::type) //transparent
776
+ at(const K& k) const
777
+ {
778
+ const_iterator i = this->find(k);
779
+ if(i == this->cend()){
780
+ throw_out_of_range("map::at key not found");
781
+ }
782
+ return i->second;
783
+ }
784
+
722
785
  //////////////////////////////////////////////
723
786
  //
724
787
  // modifiers
@@ -800,42 +863,6 @@ class map
800
863
  { return this->base_t::emplace_hint_unique(p, boost::forward<Pair>(x)); }
801
864
 
802
865
 
803
- /*
804
- //! <b>Effects</b>: Move constructs a new value from x if and only if there is
805
- //! no element in the container with key equivalent to the key of x.
806
- //! p is a hint pointing to where the insert should start to search.
807
- //!
808
- //! <b>Returns</b>: An iterator pointing to the element with key equivalent
809
- //! to the key of x.
810
- //!
811
- //! <b>Complexity</b>: Logarithmic in general, but amortized constant if t
812
- //! is inserted right before p.
813
- inline iterator insert(const_iterator p, BOOST_RV_REF(nonconst_value_type) x)
814
- { return this->try_emplace(p, boost::move(x.first), boost::move(x.second)); }
815
-
816
- //! <b>Effects</b>: Move constructs a new value from x if and only if there is
817
- //! no element in the container with key equivalent to the key of x.
818
- //! p is a hint pointing to where the insert should start to search.
819
- //!
820
- //! <b>Returns</b>: An iterator pointing to the element with key equivalent
821
- //! to the key of x.
822
- //!
823
- //! <b>Complexity</b>: Logarithmic in general, but amortized constant if t
824
- //! is inserted right before p.
825
- inline iterator insert(const_iterator p, BOOST_RV_REF(movable_value_type) x)
826
- { return this->try_emplace(p, boost::move(x.first), boost::move(x.second)); }
827
-
828
- //! <b>Effects</b>: Inserts a copy of x in the container.
829
- //! p is a hint pointing to where the insert should start to search.
830
- //!
831
- //! <b>Returns</b>: An iterator pointing to the element with key equivalent to the key of x.
832
- //!
833
- //! <b>Complexity</b>: Logarithmic.
834
- inline iterator insert(const_iterator p, const nonconst_value_type& x)
835
- { return this->try_emplace(p, x.first, x.second); }
836
-
837
-
838
- */
839
866
  //! <b>Requires</b>: first, last are not iterators into *this.
840
867
  //!
841
868
  //! <b>Effects</b>: inserts each element from the range [first,last) if and only
@@ -931,7 +958,7 @@ class map
931
958
  //! <b>Complexity</b>: Logarithmic.
932
959
  template <class... Args>
933
960
  inline std::pair<iterator, bool> try_emplace(const key_type& k, BOOST_FWD_REF(Args)... args)
934
- { return this->base_t::try_emplace(const_iterator(), k, boost::forward<Args>(args)...); }
961
+ { return this->base_t::try_emplace(k, boost::forward<Args>(args)...); }
935
962
 
936
963
  //! <b>Requires</b>: value_type shall be EmplaceConstructible into map from piecewise_construct,
937
964
  //! forward_as_tuple(k), forward_as_tuple(forward<Args>(args)...).
@@ -961,7 +988,7 @@ class map
961
988
  //! <b>Complexity</b>: Logarithmic.
962
989
  template <class... Args>
963
990
  inline std::pair<iterator, bool> try_emplace(BOOST_RV_REF(key_type) k, BOOST_FWD_REF(Args)... args)
964
- { return this->base_t::try_emplace(const_iterator(), boost::move(k), boost::forward<Args>(args)...); }
991
+ { return this->base_t::try_emplace(boost::move(k), boost::forward<Args>(args)...); }
965
992
 
966
993
  //! <b>Requires</b>: value_type shall be EmplaceConstructible into map from piecewise_construct,
967
994
  //! forward_as_tuple(move(k)), forward_as_tuple(forward<Args>(args)...).
@@ -978,6 +1005,54 @@ class map
978
1005
  inline iterator try_emplace(const_iterator hint, BOOST_RV_REF(key_type) k, BOOST_FWD_REF(Args)... args)
979
1006
  { return this->base_t::try_emplace(hint, boost::move(k), boost::forward<Args>(args)...).first; }
980
1007
 
1008
+ //! <b>Precondition</b>: This overload is available only if key_compare::is_transparent exists.
1009
+ //!
1010
+ //! <b>Requires</b>: value_type shall be EmplaceConstructible into map from piecewise_construct,
1011
+ //! forward_as_tuple(move(k)), forward_as_tuple(forward<Args>(args)...).
1012
+ //!
1013
+ //! <b>Effects</b>: If the map already contains an element whose key is equivalent to k, there is no effect. Otherwise
1014
+ //! inserts an object of type value_type constructed with piecewise_construct, forward_as_tuple(forward<K>(k)),
1015
+ //! forward_as_tuple(forward<Args>(args)...).
1016
+ //!
1017
+ //! <b>Returns</b>: The bool component of the returned pair is true if and only if the
1018
+ //! insertion took place. The returned iterator points to the map element whose key is equivalent to k.
1019
+ //!
1020
+ //! <b>Complexity</b>: Logarithmic search time plus linear insertion time in case the key is not present.
1021
+ template <class K, class... Args>
1022
+ inline BOOST_CONTAINER_DOC1ST
1023
+ (std::pair<iterator BOOST_MOVE_I bool>
1024
+ , typename dtl::enable_if_c<
1025
+ dtl::is_transparent<key_compare>::value && //transparent
1026
+ !dtl::is_convertible<K BOOST_MOVE_I iterator>::value && //not convertible to iterator
1027
+ !dtl::is_convertible<K BOOST_MOVE_I const_iterator>::value //not convertible to const_iterator
1028
+ BOOST_MOVE_I std::pair<iterator BOOST_MOVE_I bool>
1029
+ >::type)
1030
+ try_emplace(BOOST_FWD_REF(K) k, BOOST_FWD_REF(Args)... args)
1031
+ { return this->base_t::try_emplace(boost::forward<K>(k), boost::forward<Args>(args)...); }
1032
+
1033
+ //! <b>Precondition</b>: This overload is available only if key_compare::is_transparent exists.
1034
+ //!
1035
+ //! <b>Requires</b>: value_type shall be EmplaceConstructible into map from piecewise_construct,
1036
+ //! forward_as_tuple(move(k)), forward_as_tuple(forward<Args>(args)...).
1037
+ //!
1038
+ //! <b>Effects</b>: If the map already contains an element whose key is equivalent to k, there is no effect. Otherwise
1039
+ //! inserts an object of type value_type constructed with piecewise_construct, forward_as_tuple(move(k)),
1040
+ //! forward_as_tuple(forward<Args>(args)...).
1041
+ //!
1042
+ //! <b>Returns</b>: The returned iterator points to the map element whose key is equivalent to k.
1043
+ //!
1044
+ //! <b>Complexity</b>: Logarithmic in general, but amortized constant if value
1045
+ //! is inserted right before p. Linear insertion time in case no equivalent key is present.
1046
+ template <class K, class... Args>
1047
+ inline BOOST_CONTAINER_DOC1ST
1048
+ ( iterator
1049
+ , typename dtl::enable_if_transparent< key_compare
1050
+ BOOST_MOVE_I K
1051
+ BOOST_MOVE_I iterator
1052
+ >::type) //transparent
1053
+ try_emplace(const_iterator hint, BOOST_FWD_REF(K) k, BOOST_FWD_REF(Args)... args)
1054
+ { return this->base_t::try_emplace(hint, boost::forward<K>(k), boost::forward<Args>(args)...).first; }
1055
+
981
1056
  #else // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
982
1057
 
983
1058
  #define BOOST_CONTAINER_MAP_EMPLACE_CODE(N) \
@@ -991,7 +1066,7 @@ class map
991
1066
  \
992
1067
  BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
993
1068
  inline std::pair<iterator, bool> try_emplace(const key_type& k BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
994
- { return this->base_t::try_emplace(const_iterator(), k BOOST_MOVE_I##N BOOST_MOVE_FWD##N); }\
1069
+ { return this->base_t::try_emplace(k BOOST_MOVE_I##N BOOST_MOVE_FWD##N); }\
995
1070
  \
996
1071
  BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
997
1072
  inline iterator try_emplace(const_iterator hint, const key_type &k BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
@@ -999,20 +1074,38 @@ class map
999
1074
  \
1000
1075
  BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
1001
1076
  inline std::pair<iterator, bool> try_emplace(BOOST_RV_REF(key_type) k BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
1002
- { return this->base_t::try_emplace(const_iterator(), boost::move(k) BOOST_MOVE_I##N BOOST_MOVE_FWD##N); }\
1077
+ { return this->base_t::try_emplace(boost::move(k) BOOST_MOVE_I##N BOOST_MOVE_FWD##N); }\
1003
1078
  \
1004
1079
  BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
1005
1080
  inline iterator try_emplace(const_iterator hint, BOOST_RV_REF(key_type) k BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
1006
1081
  { return this->base_t::try_emplace(hint, boost::move(k) BOOST_MOVE_I##N BOOST_MOVE_FWD##N).first; }\
1082
+ \
1083
+ template <class K BOOST_MOVE_I##N BOOST_MOVE_CLASS##N> \
1084
+ typename dtl::enable_if_c< \
1085
+ dtl::is_transparent<key_compare>::value && \
1086
+ !dtl::is_convertible<K BOOST_MOVE_I iterator>::value && \
1087
+ !dtl::is_convertible<K BOOST_MOVE_I const_iterator>::value \
1088
+ BOOST_MOVE_I std::pair<iterator BOOST_MOVE_I bool> \
1089
+ >::type \
1090
+ try_emplace(BOOST_FWD_REF(K) k BOOST_MOVE_I##N BOOST_MOVE_UREF##N) \
1091
+ { return this->base_t::try_emplace(boost::forward<K>(k) BOOST_MOVE_I##N BOOST_MOVE_FWD##N); } \
1092
+ \
1093
+ template <class K BOOST_MOVE_I##N BOOST_MOVE_CLASS##N> \
1094
+ typename dtl::enable_if_transparent< key_compare \
1095
+ BOOST_MOVE_I K \
1096
+ BOOST_MOVE_I iterator \
1097
+ >::type \
1098
+ try_emplace(const_iterator hint BOOST_MOVE_I BOOST_FWD_REF(K) k BOOST_MOVE_I##N BOOST_MOVE_UREF##N) \
1099
+ { return this->base_t::try_emplace(hint BOOST_MOVE_I boost::forward<K>(k) BOOST_MOVE_I##N BOOST_MOVE_FWD##N).first; } \
1007
1100
  //
1008
1101
  BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_MAP_EMPLACE_CODE)
1009
1102
  #undef BOOST_CONTAINER_MAP_EMPLACE_CODE
1010
1103
 
1011
1104
  #endif // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
1012
1105
 
1013
- //! <b>Effects</b>: If present, erases the element in the container with key equivalent to x.
1106
+ //! <b>Effects</b>: If present, erases the elements in the container with key equivalent to x.
1014
1107
  //!
1015
- //! <b>Returns</b>: Returns the number of erased elements (0/1).
1108
+ //! <b>Returns</b>: Returns the number of erased elements.
1016
1109
  //!
1017
1110
  //! <b>Complexity</b>: log(size()) + count(k)
1018
1111
  inline size_type erase(const key_type& x)
@@ -1021,9 +1114,9 @@ class map
1021
1114
  //! <b>Requires</b>: This overload is available only if
1022
1115
  //! key_compare::is_transparent exists.
1023
1116
  //!
1024
- //! <b>Effects</b>: If present, erases the element in the container with key equivalent to x.
1117
+ //! <b>Effects</b>: If present, erases the elements in the container with key equivalent to x.
1025
1118
  //!
1026
- //! <b>Returns</b>: Returns the number of erased elements (0/1).
1119
+ //! <b>Returns</b>: Returns the number of erased elements.
1027
1120
  template <class K>
1028
1121
  inline BOOST_CONTAINER_DOC1ST
1029
1122
  (size_type
@@ -1069,6 +1162,29 @@ class map
1069
1162
  return BOOST_MOVE_RET(node_type, nh);
1070
1163
  }
1071
1164
 
1165
+ //! <b>Requires</b>: This overload is available only if
1166
+ //! key_compare::is_transparent exists.
1167
+ //!
1168
+ //! <b>Effects</b>: Removes the first element in the container with key equivalent to k.
1169
+ //!
1170
+ //! <b>Returns</b>: A node_type owning the element if found, otherwise an empty node_type.
1171
+ //!
1172
+ //! <b>Complexity</b>: log(size()).
1173
+ template<class K>
1174
+ inline BOOST_CONTAINER_DOC1ST
1175
+ (node_type
1176
+ , typename dtl::enable_if_c<
1177
+ dtl::is_transparent<key_compare>::value && //transparent
1178
+ !dtl::is_convertible<K BOOST_MOVE_I iterator>::value && //not convertible to iterator
1179
+ !dtl::is_convertible<K BOOST_MOVE_I const_iterator>::value //not convertible to const_iterator
1180
+ BOOST_MOVE_I node_type>::type)
1181
+ extract(BOOST_FWD_REF(K) k)
1182
+ {
1183
+ typename base_t::node_type base_nh(this->base_t::extract(k));
1184
+ node_type nh(boost::move(base_nh));
1185
+ return BOOST_MOVE_RET(node_type, nh);
1186
+ }
1187
+
1072
1188
  //! <b>Effects</b>: Removes the element pointed to by "position".
1073
1189
  //!
1074
1190
  //! <b>Returns</b>: A node_type owning the element, otherwise an empty node_type.
@@ -1188,7 +1304,7 @@ class map
1188
1304
  //! <b>Returns</b>: The number of elements with key equivalent to x.
1189
1305
  //!
1190
1306
  //! <b>Complexity</b>: log(size())+count(k)
1191
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1307
+ BOOST_CONTAINER_NODISCARD inline
1192
1308
  size_type count(const key_type& x) const
1193
1309
  { return static_cast<size_type>(this->find(x) != this->cend()); }
1194
1310
 
@@ -1199,7 +1315,7 @@ class map
1199
1315
  //!
1200
1316
  //! <b>Complexity</b>: log(size())+count(k)
1201
1317
  template<typename K>
1202
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1318
+ BOOST_CONTAINER_NODISCARD inline
1203
1319
  size_type count(const K& x) const
1204
1320
  { return static_cast<size_type>(this->find(x) != this->cend()); }
1205
1321
 
@@ -1378,11 +1494,18 @@ inline typename map<K, M, C, A, O>::size_type erase_if(map<K, M, C, A, O>& c, Pr
1378
1494
 
1379
1495
  #ifndef BOOST_CONTAINER_NO_CXX17_CTAD
1380
1496
 
1497
+ //! <b>Deduction guide</b>: allows a `map` to be constructed from the iterator range
1498
+ //! <code>[first, last)</code>, deducing the key and mapped types from the pair value
1499
+ //! type of `InputIterator` and using the default comparator and allocator.
1381
1500
  template <typename InputIterator>
1382
1501
  map(InputIterator, InputIterator) ->
1383
1502
  map< it_based_non_const_first_type_t<InputIterator>
1384
1503
  , it_based_second_type_t<InputIterator>>;
1385
1504
 
1505
+ //! <b>Deduction guide</b>: allows a `map` to be constructed from the iterator range
1506
+ //! <code>[first, last)</code>, deducing the key and mapped types from `InputIterator`.
1507
+ //! The trailing argument is used as the allocator if it is an allocator type,
1508
+ //! otherwise it is used as the comparator.
1386
1509
  template < typename InputIterator, typename AllocatorOrCompare>
1387
1510
  map(InputIterator, InputIterator, AllocatorOrCompare const&) ->
1388
1511
  map< it_based_non_const_first_type_t<InputIterator>
@@ -1399,6 +1522,9 @@ template < typename InputIterator, typename AllocatorOrCompare>
1399
1522
  >::type
1400
1523
  >;
1401
1524
 
1525
+ //! <b>Deduction guide</b>: allows a `map` to be constructed from the iterator range
1526
+ //! <code>[first, last)</code>, deducing the key and mapped types from `InputIterator`
1527
+ //! and taking the comparator and allocator types from the supplied arguments.
1402
1528
  template < typename InputIterator, typename Compare, typename Allocator
1403
1529
  , typename = dtl::require_nonallocator_t<Compare>
1404
1530
  , typename = dtl::require_allocator_t<Allocator>>
@@ -1408,11 +1534,18 @@ map(InputIterator, InputIterator, Compare const&, Allocator const&) ->
1408
1534
  , Compare
1409
1535
  , Allocator>;
1410
1536
 
1537
+ //! <b>Deduction guide</b>: allows a `map` to be constructed from an already ordered,
1538
+ //! unique iterator range <code>[first, last)</code>, deducing the key and mapped types
1539
+ //! from `InputIterator` and using the default comparator and allocator.
1411
1540
  template <typename InputIterator>
1412
1541
  map(ordered_unique_range_t, InputIterator, InputIterator) ->
1413
1542
  map< it_based_non_const_first_type_t<InputIterator>
1414
1543
  , it_based_second_type_t<InputIterator>>;
1415
1544
 
1545
+ //! <b>Deduction guide</b>: allows a `map` to be constructed from an already ordered,
1546
+ //! unique iterator range <code>[first, last)</code>, deducing the key and mapped types
1547
+ //! from `InputIterator`. The trailing argument is used as the allocator if it is an
1548
+ //! allocator type, otherwise it is used as the comparator.
1416
1549
  template < typename InputIterator, typename AllocatorOrCompare>
1417
1550
  map(ordered_unique_range_t, InputIterator, InputIterator, AllocatorOrCompare const&) ->
1418
1551
  map< it_based_non_const_first_type_t<InputIterator>
@@ -1429,6 +1562,10 @@ map(ordered_unique_range_t, InputIterator, InputIterator, AllocatorOrCompare con
1429
1562
  >::type
1430
1563
  >;
1431
1564
 
1565
+ //! <b>Deduction guide</b>: allows a `map` to be constructed from an already ordered,
1566
+ //! unique iterator range <code>[first, last)</code>, deducing the key and mapped types
1567
+ //! from `InputIterator` and taking the comparator and allocator types from the supplied
1568
+ //! arguments.
1432
1569
  template < typename InputIterator, typename Compare, typename Allocator
1433
1570
  , typename = dtl::require_nonallocator_t<Compare>
1434
1571
  , typename = dtl::require_allocator_t<Allocator>>
@@ -1510,7 +1647,7 @@ class multimap
1510
1647
  typedef Key key_type;
1511
1648
  typedef T mapped_type;
1512
1649
  typedef typename base_t::allocator_type allocator_type;
1513
- typedef ::boost::container::allocator_traits<allocator_type> allocator_traits_type;
1650
+ typedef boost::container::allocator_traits<allocator_type> allocator_traits_type;
1514
1651
  typedef typename boost::container::allocator_traits<allocator_type>::value_type value_type;
1515
1652
  typedef typename boost::container::allocator_traits<allocator_type>::pointer pointer;
1516
1653
  typedef typename boost::container::allocator_traits<allocator_type>::const_pointer const_pointer;
@@ -1769,7 +1906,7 @@ class multimap
1769
1906
  //! <b>Effects</b>: Copy constructs a multimap.
1770
1907
  //!
1771
1908
  //! <b>Complexity</b>: Linear in x.size().
1772
- inline multimap(const multimap& x, const allocator_type &a)
1909
+ inline multimap(const multimap& x, const BOOST_CONTAINER_DOC1ST(allocator_type, typename dtl::type_identity<allocator_type>::type) &a)
1773
1910
  : base_t(static_cast<const base_t&>(x), a)
1774
1911
  {}
1775
1912
 
@@ -1778,7 +1915,7 @@ class multimap
1778
1915
  //! <b>Complexity</b>: Constant if a == x.get_allocator(), linear otherwise.
1779
1916
  //!
1780
1917
  //! <b>Postcondition</b>: x is emptied.
1781
- inline multimap(BOOST_RV_REF(multimap) x, const allocator_type &a)
1918
+ inline multimap(BOOST_RV_REF(multimap) x, const BOOST_CONTAINER_DOC1ST(allocator_type, typename dtl::type_identity<allocator_type>::type) &a)
1782
1919
  : base_t(BOOST_MOVE_BASE(base_t, x), a)
1783
1920
  {}
1784
1921
 
@@ -2030,6 +2167,10 @@ class multimap
2030
2167
 
2031
2168
  //! @copydoc ::boost::container::set::erase(const_iterator,const_iterator)
2032
2169
  iterator erase(const_iterator first, const_iterator last);
2170
+
2171
+ //! @copydoc ::boost::container::set::erase(K&&)
2172
+ template<class K>
2173
+ size_type erase(K && k);
2033
2174
  #endif
2034
2175
 
2035
2176
  //! @copydoc ::boost::container::map::extract(const key_type&)
@@ -2039,6 +2180,22 @@ class multimap
2039
2180
  return node_type(boost::move(base_nh));
2040
2181
  }
2041
2182
 
2183
+ //! @copydoc ::boost::container::map::extract(K&&)
2184
+ template<class K>
2185
+ inline BOOST_CONTAINER_DOC1ST
2186
+ (node_type
2187
+ , typename dtl::enable_if_c<
2188
+ dtl::is_transparent<key_compare>::value && //transparent
2189
+ !dtl::is_convertible<K BOOST_MOVE_I iterator>::value && //not convertible to iterator
2190
+ !dtl::is_convertible<K BOOST_MOVE_I const_iterator>::value //not convertible to const_iterator
2191
+ BOOST_MOVE_I node_type>::type)
2192
+ extract(BOOST_FWD_REF(K) k)
2193
+ {
2194
+ typename base_t::node_type base_nh(this->base_t::extract(k));
2195
+ node_type nh(boost::move(base_nh));
2196
+ return BOOST_MOVE_RET(node_type, nh);
2197
+ }
2198
+
2042
2199
  //! @copydoc ::boost::container::map::extract(const_iterator)
2043
2200
  node_type extract(const_iterator position)
2044
2201
  {
@@ -2311,11 +2468,18 @@ inline typename multimap<K, M, C, A, O>::size_type erase_if(multimap<K, M, C, A,
2311
2468
 
2312
2469
  #ifndef BOOST_CONTAINER_NO_CXX17_CTAD
2313
2470
 
2471
+ //! <b>Deduction guide</b>: allows a `multimap` to be constructed from the iterator
2472
+ //! range <code>[first, last)</code>, deducing the key and mapped types from the pair
2473
+ //! value type of `InputIterator` and using the default comparator and allocator.
2314
2474
  template <typename InputIterator>
2315
2475
  multimap(InputIterator, InputIterator) ->
2316
2476
  multimap< it_based_non_const_first_type_t<InputIterator>
2317
2477
  , it_based_second_type_t<InputIterator>>;
2318
2478
 
2479
+ //! <b>Deduction guide</b>: allows a `multimap` to be constructed from the iterator
2480
+ //! range <code>[first, last)</code>, deducing the key and mapped types from
2481
+ //! `InputIterator`. The trailing argument is used as the allocator if it is an
2482
+ //! allocator type, otherwise it is used as the comparator.
2319
2483
  template < typename InputIterator, typename AllocatorOrCompare>
2320
2484
  multimap(InputIterator, InputIterator, AllocatorOrCompare const&) ->
2321
2485
  multimap< it_based_non_const_first_type_t<InputIterator>
@@ -2332,6 +2496,10 @@ multimap(InputIterator, InputIterator, AllocatorOrCompare const&) ->
2332
2496
  >::type
2333
2497
  >;
2334
2498
 
2499
+ //! <b>Deduction guide</b>: allows a `multimap` to be constructed from the iterator
2500
+ //! range <code>[first, last)</code>, deducing the key and mapped types from
2501
+ //! `InputIterator` and taking the comparator and allocator types from the supplied
2502
+ //! arguments.
2335
2503
  template < typename InputIterator, typename Compare, typename Allocator
2336
2504
  , typename = dtl::require_nonallocator_t<Compare>
2337
2505
  , typename = dtl::require_allocator_t<Allocator>>
@@ -2341,11 +2509,18 @@ multimap(InputIterator, InputIterator, Compare const&, Allocator const&) ->
2341
2509
  , Compare
2342
2510
  , Allocator>;
2343
2511
 
2512
+ //! <b>Deduction guide</b>: allows a `multimap` to be constructed from an already
2513
+ //! ordered iterator range <code>[first, last)</code>, deducing the key and mapped
2514
+ //! types from `InputIterator` and using the default comparator and allocator.
2344
2515
  template <typename InputIterator>
2345
2516
  multimap(ordered_range_t, InputIterator, InputIterator) ->
2346
2517
  multimap< it_based_non_const_first_type_t<InputIterator>
2347
2518
  , it_based_second_type_t<InputIterator>>;
2348
2519
 
2520
+ //! <b>Deduction guide</b>: allows a `multimap` to be constructed from an already
2521
+ //! ordered iterator range <code>[first, last)</code>, deducing the key and mapped
2522
+ //! types from `InputIterator`. The trailing argument is used as the allocator if it
2523
+ //! is an allocator type, otherwise it is used as the comparator.
2349
2524
  template < typename InputIterator, typename AllocatorOrCompare>
2350
2525
  multimap(ordered_range_t, InputIterator, InputIterator, AllocatorOrCompare const&) ->
2351
2526
  multimap< it_based_non_const_first_type_t<InputIterator>
@@ -2362,6 +2537,10 @@ multimap(ordered_range_t, InputIterator, InputIterator, AllocatorOrCompare const
2362
2537
  >::type
2363
2538
  >;
2364
2539
 
2540
+ //! <b>Deduction guide</b>: allows a `multimap` to be constructed from an already
2541
+ //! ordered iterator range <code>[first, last)</code>, deducing the key and mapped
2542
+ //! types from `InputIterator` and taking the comparator and allocator types from the
2543
+ //! supplied arguments.
2365
2544
  template < typename InputIterator, typename Compare, typename Allocator
2366
2545
  , typename = dtl::require_nonallocator_t<Compare>
2367
2546
  , typename = dtl::require_allocator_t<Allocator>>
@@ -104,6 +104,9 @@ class new_allocator<void>
104
104
 
105
105
 
106
106
  //! This class is a reduced STL-compatible allocator that allocates memory using operator new
107
+ //! or compatible calls. This allocator is stateless and can be used with any type. It supports
108
+ //! overaligned types, even if the compiler does not support overaligned operator new.
109
+ //! It is a drop-in replacement for std::allocator
107
110
  template<class T>
108
111
  class new_allocator
109
112
  {
@@ -151,6 +154,7 @@ class new_allocator
151
154
 
152
155
  //!Allocates memory for an array of count elements.
153
156
  //!Throws bad_alloc if there is no enough memory
157
+ BOOST_CONTAINER_NODISCARD
154
158
  pointer allocate(size_type count)
155
159
  {
156
160
  return dtl::operator_new_allocate<T>(count);
@@ -165,6 +169,7 @@ class new_allocator
165
169
 
166
170
  //!Returns the maximum number of elements that could be allocated.
167
171
  //!Never throws
172
+ BOOST_CONTAINER_NODISCARD
168
173
  inline size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW
169
174
  { return std::size_t(-1)/(2*sizeof(T)); }
170
175
 
@@ -175,11 +180,13 @@ class new_allocator
175
180
 
176
181
  //!An new_allocator always compares to true, as memory allocated with one
177
182
  //!instance can be deallocated by another instance
183
+ BOOST_CONTAINER_NODISCARD
178
184
  inline friend bool operator==(const new_allocator &, const new_allocator &) BOOST_NOEXCEPT_OR_NOTHROW
179
185
  { return true; }
180
186
 
181
187
  //!An new_allocator always compares to false, as memory allocated with one
182
188
  //!instance can be deallocated by another instance
189
+ BOOST_CONTAINER_NODISCARD
183
190
  inline friend bool operator!=(const new_allocator &, const new_allocator &) BOOST_NOEXCEPT_OR_NOTHROW
184
191
  { return false; }
185
192
  };