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
@@ -0,0 +1,724 @@
1
+ // Copyright (C) 2026 Andrzej Krzemieński.
2
+ //
3
+ // Use, modification, and distribution is subject to the Boost Software
4
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
5
+ // http://www.boost.org/LICENSE_1_0.txt)
6
+ //
7
+ // See http://www.boost.org/libs/optional for documentation.
8
+ //
9
+ // You are welcome to contact the author at:
10
+ // akrzemi1@gmail.com
11
+ //
12
+ //
13
+ // This header provides definitions required by any specialization of
14
+ // optional<>.
15
+
16
+ #ifndef BOOST_OPTIONAL_DETAIL_UNION_OPTIONAL_01FEB2026_HPP
17
+ #define BOOST_OPTIONAL_DETAIL_UNION_OPTIONAL_01FEB2026_HPP
18
+
19
+ //#include <initializer_list>
20
+ #include <boost/assert.hpp>
21
+ #include <boost/core/invoke_swap.hpp>
22
+ #include <boost/throw_exception.hpp>
23
+ #include <boost/optional/bad_optional_access.hpp>
24
+
25
+
26
+
27
+ // This macro shall be put in the position of a template parameter.
28
+ // It emulates the requires clause.
29
+ # define BOOST_OPTIONAL_REQUIRES(...) typename ::std::enable_if<__VA_ARGS__::value, bool>::type = false
30
+
31
+
32
+ # ifdef __cpp_guaranteed_copy_elision
33
+ # if __cpp_guaranteed_copy_elision
34
+ # define BOOST_OPTIONAL_CONSTEXPR_COPY
35
+ # endif
36
+ # endif
37
+
38
+
39
+ template <typename T, typename U>
40
+ struct fail_hard_on_nonconvertible
41
+ {
42
+ static_assert(::std::is_convertible<U&&, T>::value, "The argument must be convertible to T");
43
+ using type = bool;
44
+ };
45
+
46
+ // Missing C++17 type traits
47
+ namespace boost { namespace optional_detail {
48
+
49
+ template <class...>
50
+ struct conjunction : ::std::true_type {};
51
+
52
+ template <class B1>
53
+ struct conjunction<B1> : B1 {};
54
+
55
+ template <class B1, class... Bn>
56
+ struct conjunction<B1, Bn...>
57
+ : ::std::conditional<bool(B1::value), conjunction<Bn...>, B1>::type {};
58
+
59
+ }}
60
+
61
+ namespace boost { namespace optional_detail {
62
+
63
+ // Tag to indicate a special-purpose constructor
64
+ BOOST_INLINE_VARIABLE constexpr struct trivial_init_t{} trivial_init{};
65
+
66
+
67
+ template <class T>
68
+ union constexpr_union_storage_t
69
+ {
70
+ static_assert(::std::is_trivially_destructible<T>::value, "!!");
71
+
72
+ unsigned char dummy_;
73
+ T value_;
74
+
75
+ constexpr constexpr_union_storage_t( trivial_init_t ) noexcept : dummy_() {};
76
+
77
+ #if defined(BOOST_GCC) && (__GNUC__ >= 7)
78
+ // false positive, see https://github.com/boostorg/variant2/issues/55,
79
+ // https://github.com/boostorg/url/issues/979
80
+ # pragma GCC diagnostic push
81
+ # pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
82
+ #endif
83
+
84
+ template <class... Args>
85
+ constexpr constexpr_union_storage_t( Args&&... args ) : value_(forward_<Args>(args)...) {}
86
+
87
+ #if defined(BOOST_GCC) && (__GNUC__ >= 7)
88
+ # pragma GCC diagnostic pop
89
+ #endif
90
+
91
+ //~constexpr_union_storage_t() = default; // No need to destroy a trivially-destructible type
92
+ };
93
+
94
+ template <class T>
95
+ union fallback_union_storage_t
96
+ {
97
+ unsigned char dummy_;
98
+ T value_;
99
+
100
+ constexpr fallback_union_storage_t( trivial_init_t ) noexcept : dummy_() {};
101
+
102
+ #if defined(BOOST_GCC) && (__GNUC__ >= 7)
103
+ // false positive, see https://github.com/boostorg/variant2/issues/55,
104
+ // https://github.com/boostorg/url/issues/979
105
+ # pragma GCC diagnostic push
106
+ # pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
107
+ #endif
108
+
109
+ template <class... Args>
110
+ constexpr fallback_union_storage_t( Args&&... args ) : value_(forward_<Args>(args)...) {}
111
+
112
+ #if defined(BOOST_GCC) && (__GNUC__ >= 7)
113
+ # pragma GCC diagnostic pop
114
+ #endif
115
+
116
+ ~fallback_union_storage_t(){} // My owner will destroy the `T` if needed.
117
+ // Cannot default in a union with nontrivial `T`.
118
+ };
119
+
120
+
121
+ // `guarded_storage` is a union + a flag indicating if a `T` has been initialized.
122
+ // this way the destructor knows if it should destroy the `T`.
123
+ template <class T>
124
+ struct constexpr_guarded_storage
125
+ {
126
+ static_assert(::std::is_trivially_destructible<T>::value, "!!");
127
+
128
+ bool init_;
129
+ constexpr_union_storage_t<T> storage_;
130
+
131
+ constexpr constexpr_guarded_storage() noexcept : init_(false), storage_(trivial_init) {};
132
+
133
+ explicit constexpr constexpr_guarded_storage(const T& v) : init_(true), storage_(v) {}
134
+
135
+ explicit constexpr constexpr_guarded_storage(T&& v) : init_(true), storage_(move_(v)) {}
136
+
137
+ template <class... Args> explicit constexpr constexpr_guarded_storage(optional_ns::in_place_init_t, Args&&... args)
138
+ : init_(true), storage_(forward_<Args>(args)...) {}
139
+
140
+ // template <class U, class... Args, BOOST_OPTIONAL_REQUIRES(::std::is_constructible<T, ::std::initializer_list<U>>)>
141
+ // constexpr explicit constexpr_guarded_storage(optional_ns::in_place_init_t, ::std::initializer_list<U> il, Args&&... args)
142
+ // : init_(true), storage_(il, forward_<Args>(args)...) {}
143
+
144
+ BOOST_CXX14_CONSTEXPR void reset () noexcept { init_ = false; }
145
+
146
+ //~constexpr_guarded_storage() = default;
147
+
148
+ #if (defined(_MSC_VER) && 1910 <= _MSC_VER && _MSC_VER <= 1916)
149
+ // Workaround for MSVC 14.1x bug where it eagerly tries to define the copy/move operations
150
+ // these are declared but never defined
151
+ constexpr_guarded_storage(const constexpr_guarded_storage&);
152
+ constexpr_guarded_storage(constexpr_guarded_storage&&);
153
+ constexpr_guarded_storage& operator=(const constexpr_guarded_storage&);
154
+ constexpr_guarded_storage& operator=(constexpr_guarded_storage&&);
155
+ #endif
156
+ };
157
+
158
+
159
+ template <class T>
160
+ struct fallback_guarded_storage
161
+ {
162
+ bool init_;
163
+ fallback_union_storage_t<T> storage_;
164
+
165
+ constexpr fallback_guarded_storage() noexcept : init_(false), storage_(trivial_init) {};
166
+
167
+ explicit constexpr fallback_guarded_storage(const T& v) : init_(true), storage_(v) {}
168
+
169
+ explicit constexpr fallback_guarded_storage(T&& v) : init_(true), storage_(move_(v)) {}
170
+
171
+ template <class... Args> explicit constexpr fallback_guarded_storage(optional_ns::in_place_init_t, Args&&... args)
172
+ : init_(true), storage_(forward_<Args>(args)...) {}
173
+
174
+ // template <class U, class... Args, BOOST_OPTIONAL_REQUIRES(::std::is_constructible<T, ::std::initializer_list<U>>)>
175
+ // explicit fallback_guarded_storage(optional_ns::in_place_init_t, ::std::initializer_list<U> il, Args&&... args)
176
+ // : init_(true), storage_(il, forward_<Args>(args)...) {}
177
+
178
+ void reset() noexcept
179
+ {
180
+ if (init_)
181
+ {
182
+ storage_.value_.T::~T();
183
+ init_ = false;
184
+ }
185
+
186
+ }
187
+
188
+ ~fallback_guarded_storage() { if (init_) storage_.value_.T::~T(); }
189
+
190
+ #if (defined(_MSC_VER) && 1910 <= _MSC_VER && _MSC_VER <= 1916)
191
+ // Workaround for MSVC 14.1x bug where it eagerly tries to define the copy/move operations
192
+ // These are declared but never defined
193
+ fallback_guarded_storage(const fallback_guarded_storage&);
194
+ fallback_guarded_storage(fallback_guarded_storage&&);
195
+ fallback_guarded_storage& operator=(const fallback_guarded_storage&);
196
+ fallback_guarded_storage& operator=(fallback_guarded_storage&&);
197
+ #endif
198
+ };
199
+
200
+
201
+ template <class T>
202
+ using guarded_storage = typename ::std::conditional<
203
+ ::std::is_trivially_destructible<T>::value, // if possible
204
+ constexpr_guarded_storage<typename ::std::remove_const<T>::type>, // use storage with trivial destructor
205
+ fallback_guarded_storage<typename ::std::remove_const<T>::type>
206
+ >::type;
207
+
208
+
209
+ }}
210
+
211
+
212
+ namespace boost {
213
+
214
+ template <class T>
215
+ class optional : public optional_detail::optional_tag
216
+ {
217
+ using storage_t = optional_detail::guarded_storage<T>;
218
+ storage_t storage;
219
+ static_assert( !::std::is_same<typename std::decay<T>::type, none_t>::value, "optional<none_t> is illegal" );
220
+ static_assert( !::std::is_same<typename std::decay<T>::type, in_place_init_t>::value, "optional<in_place_init_t> is illegal" );
221
+ static_assert( !::std::is_same<typename std::decay<T>::type, in_place_init_if_t>::value, "optional<in_place_init_if_t> is illegal" );
222
+
223
+ BOOST_CXX14_CONSTEXPR typename ::std::remove_const<T>::type* dataptr() { return ::boost::addressof(storage.storage_.value_); }
224
+ constexpr const T* dataptr() const { return ::boost::addressof(storage.storage_.value_); }
225
+
226
+ constexpr const T& contained_val() const& { return storage.storage_.value_; }
227
+ BOOST_CXX14_CONSTEXPR T&& contained_val() && { return optional_detail::move_(storage.storage_.value_); }
228
+ BOOST_CXX14_CONSTEXPR T& contained_val() & { return storage.storage_.value_; }
229
+
230
+ template <typename... Args>
231
+ BOOST_OPTIONAL_CXX20_CONSTEXPR void initialize(Args&&... args)
232
+ {
233
+ BOOST_ASSERT(!storage.init_);
234
+ ::new (static_cast<void*>(dataptr())) T(optional_detail::forward_<Args>(args)...);
235
+ storage.init_ = true;
236
+ }
237
+
238
+ #ifdef BOOST_OPTIONAL_CONSTEXPR_COPY
239
+ // The conditional initialization of storage needs to employ a factory
240
+ // function, so that we can utilize the guaranteed copy elision on the
241
+ // return type.
242
+ // an alternative -- using a conditional operator in the initializer --
243
+ // does not work in MSVC 14.2 and 14.3.
244
+ template <typename... U>
245
+ static constexpr storage_t conditional_storage_from_values(bool cond, U&&... v)
246
+ {
247
+ if (cond)
248
+ return storage_t(in_place_init, optional_detail::forward_<U>(v)...);
249
+ else
250
+ return storage_t();
251
+ }
252
+
253
+ template <typename OU>
254
+ static constexpr storage_t conditional_storage_from_optional(OU&& ou)
255
+ {
256
+ if (ou.has_value())
257
+ return storage_t(in_place_init, *optional_detail::forward_<OU>(ou));
258
+ else
259
+ return storage_t();
260
+ }
261
+ #endif
262
+
263
+ public:
264
+ using value_type = T;
265
+ using unqualified_value_type = typename ::std::remove_const<T>::type;
266
+
267
+ using reference_type = T&;
268
+ using reference_const_type = T const&;
269
+ using argument_type = T const&;
270
+ using rval_reference_type = T&&;
271
+ using reference_type_of_temporary_wrapper = T&&;
272
+ using pointer_type = T*;
273
+ using pointer_const_type = T const*;
274
+
275
+
276
+ constexpr bool is_initialized() const noexcept { return storage.init_; }
277
+
278
+ constexpr optional() noexcept : storage() {};
279
+ constexpr optional(none_t) noexcept : storage() {};
280
+
281
+ constexpr optional(const T& v) : storage(v) {}
282
+ constexpr optional(T&& v) : storage(optional_detail::move_(v)) {}
283
+
284
+ #ifdef BOOST_OPTIONAL_CONSTEXPR_COPY
285
+ constexpr optional(bool cond, const T& v)
286
+ : storage(conditional_storage_from_values(cond, v))
287
+ {}
288
+
289
+ constexpr optional(bool cond, T&& v)
290
+ : storage(conditional_storage_from_values(cond, optional_detail::move_(v)))
291
+ {}
292
+
293
+ constexpr optional(const optional& rhs)
294
+ : storage(conditional_storage_from_optional(rhs))
295
+ {}
296
+
297
+ constexpr optional(optional&& rhs)
298
+ noexcept(::std::is_nothrow_move_constructible<T>::value)
299
+ : storage(conditional_storage_from_optional(optional_detail::move_(rhs)))
300
+ {}
301
+
302
+ template <typename U, BOOST_OPTIONAL_REQUIRES(::std::is_constructible<T, U const&>)>
303
+ constexpr explicit optional(optional<U> const& rhs)
304
+ : storage(conditional_storage_from_optional(rhs))
305
+ {}
306
+
307
+ template <typename U, BOOST_OPTIONAL_REQUIRES(::std::is_constructible<T, U&&>)>
308
+ constexpr explicit optional(optional<U> && rhs)
309
+ : storage(conditional_storage_from_optional(optional_detail::move_(rhs)))
310
+ {}
311
+
312
+ template <typename... Args>
313
+ constexpr explicit optional( in_place_init_if_t, bool cond, Args&&... args )
314
+ : storage(conditional_storage_from_values(cond, optional_detail::forward_<Args>(args)...))
315
+ {}
316
+ #else
317
+ optional(bool cond, const T& v)
318
+ : storage()
319
+ {
320
+ if (cond)
321
+ initialize(v);
322
+ }
323
+
324
+ optional(bool cond, T&& v)
325
+ : storage()
326
+ {
327
+ if (cond)
328
+ initialize(optional_detail::move_(v));
329
+ }
330
+
331
+ optional(const optional& rhs)
332
+ : storage()
333
+ {
334
+ if (rhs.is_initialized())
335
+ initialize(*rhs);
336
+ }
337
+
338
+ optional(optional&& rhs)
339
+ noexcept(::std::is_nothrow_move_constructible<T>::value)
340
+ : storage()
341
+ {
342
+ if (rhs.is_initialized())
343
+ initialize(*optional_detail::move_(rhs));
344
+ }
345
+
346
+ template <typename U, BOOST_OPTIONAL_REQUIRES(::std::is_constructible<T, U const&>)>
347
+ explicit optional(optional<U> const& rhs)
348
+ : storage()
349
+ {
350
+ if (rhs.is_initialized())
351
+ initialize(*rhs);
352
+ }
353
+
354
+ template <typename U, BOOST_OPTIONAL_REQUIRES(::std::is_constructible<T, U&&>)>
355
+ explicit optional(optional<U> && rhs)
356
+ : storage()
357
+ {
358
+ if (rhs.is_initialized())
359
+ initialize(*optional_detail::move_(rhs));
360
+ }
361
+
362
+ template <typename... Args>
363
+ explicit optional( in_place_init_if_t, bool cond, Args&&... args )
364
+ : storage()
365
+ {
366
+ if (cond)
367
+ initialize(optional_detail::forward_<Args>(args)...);
368
+ }
369
+ #endif // BOOST_OPTIONAL_CONSTEXPR_COPY
370
+
371
+ template <typename FT,
372
+ BOOST_OPTIONAL_REQUIRES(optional_detail::is_typed_in_place_factory<FT>)>
373
+ /*non-constexpr (deprecated)*/
374
+ explicit optional (FT&& factory)
375
+ : storage()
376
+ {
377
+ factory.apply(this->dataptr());
378
+ storage.init_ = true ;
379
+ }
380
+
381
+ template <typename FT,
382
+ BOOST_OPTIONAL_REQUIRES(optional_detail::is_in_place_factory<FT>)>
383
+ /*non-constexpr (deprecated)*/
384
+ explicit optional (FT&& factory)
385
+ : storage()
386
+ {
387
+ boost_optional_detail::construct<value_type>(factory, this->dataptr());
388
+ storage.init_ = true;
389
+ }
390
+
391
+ template <typename U,
392
+ BOOST_OPTIONAL_REQUIRES(::std::is_constructible<T, U&&>),
393
+ BOOST_OPTIONAL_REQUIRES(!optional_detail::is_typed_in_place_factory<U>),
394
+ BOOST_OPTIONAL_REQUIRES(!optional_detail::is_in_place_factory<U>),
395
+ BOOST_OPTIONAL_REQUIRES(!BOOST_OPTIONAL_IS_TAGGED(optional_detail::optional_tag, U))
396
+ >
397
+ constexpr explicit optional(U&& v)
398
+ : storage(optional_ns::in_place_init, optional_detail::forward_<U>(v))
399
+ {}
400
+
401
+ template <typename... Args>
402
+ constexpr explicit optional( in_place_init_t, Args&&... args )
403
+ : storage(in_place_init, optional_detail::forward_<Args>(args)...)
404
+ {}
405
+
406
+ BOOST_CXX14_CONSTEXPR operator optional<T&>() & noexcept
407
+ {
408
+ return this->has_value() ? optional<T&>(**this) : optional<T&>();
409
+ }
410
+
411
+ BOOST_CONSTEXPR operator optional<const T&>() const& noexcept
412
+ {
413
+ return this->has_value() ? optional<const T&>(**this) : optional<const T&>();
414
+ }
415
+
416
+ BOOST_CXX14_CONSTEXPR operator optional<T&>() && noexcept = delete;
417
+ BOOST_CONSTEXPR operator optional<const T&>() const&& noexcept = delete;
418
+
419
+
420
+ BOOST_CXX14_CONSTEXPR void reset() noexcept
421
+ {
422
+ storage.reset();
423
+ }
424
+
425
+ BOOST_OPTIONAL_CXX20_CONSTEXPR void reset(const T& v)
426
+ {
427
+ *this = v;
428
+ }
429
+
430
+ template <typename... Args>
431
+ BOOST_OPTIONAL_CXX20_CONSTEXPR void emplace(Args&&... args)
432
+ {
433
+ reset();
434
+ // <-- now we are not containing a value
435
+ initialize(optional_detail::forward_<Args>(args)...);
436
+ }
437
+
438
+
439
+ BOOST_CXX14_CONSTEXPR optional& operator=(none_t) noexcept
440
+ {
441
+ reset();
442
+ return *this;
443
+ }
444
+
445
+ BOOST_OPTIONAL_CXX20_CONSTEXPR optional& operator=(const optional& rhs)
446
+ {
447
+ if (has_value())
448
+ {
449
+ if (rhs.has_value())
450
+ **this = *rhs;
451
+ else
452
+ reset();
453
+ }
454
+ else
455
+ {
456
+ if (rhs.has_value())
457
+ initialize(*rhs);
458
+ }
459
+
460
+ return *this;
461
+ }
462
+
463
+ BOOST_OPTIONAL_CXX20_CONSTEXPR optional& operator=(optional&& rhs)
464
+ noexcept(::std::is_nothrow_move_assignable<T>::value && ::std::is_nothrow_move_constructible<T>::value)
465
+ {
466
+ if (has_value())
467
+ {
468
+ if (rhs.has_value())
469
+ **this = *optional_detail::move_(rhs);
470
+ else
471
+ reset();
472
+ }
473
+ else
474
+ {
475
+ if (rhs.has_value())
476
+ initialize(*optional_detail::move_(rhs) );
477
+ }
478
+
479
+ return *this;
480
+ }
481
+
482
+ template <typename U>
483
+ BOOST_OPTIONAL_CXX20_CONSTEXPR optional& operator=(const optional<U>& rhs)
484
+ {
485
+ if (has_value())
486
+ {
487
+ if (rhs.has_value())
488
+ **this = *rhs;
489
+ else
490
+ reset();
491
+ }
492
+ else
493
+ {
494
+ if (rhs.has_value())
495
+ initialize(*rhs);
496
+ }
497
+
498
+ return *this;
499
+ }
500
+
501
+ template <typename U>
502
+ BOOST_OPTIONAL_CXX20_CONSTEXPR optional& operator=(optional<U>&& rhs)
503
+ {
504
+ if (has_value())
505
+ {
506
+ if (rhs.has_value())
507
+ **this = *optional_detail::move_(rhs);
508
+ else
509
+ reset();
510
+ }
511
+ else
512
+ {
513
+ if (rhs.has_value())
514
+ initialize(*optional_detail::move_(rhs));
515
+ }
516
+
517
+ return *this;
518
+ }
519
+
520
+ template <class U = typename ::std::remove_cv<T>::type,
521
+ BOOST_OPTIONAL_REQUIRES(!::std::is_same<typename ::std::decay<U>::type, optional>),
522
+ BOOST_OPTIONAL_REQUIRES(!optional_detail::conjunction<::std::is_scalar<T>, ::std::is_same<T, BOOST_OPTIONAL_DECAY(U)>>),
523
+ BOOST_OPTIONAL_REQUIRES(::std::is_constructible<T, U>),
524
+ BOOST_OPTIONAL_REQUIRES(::std::is_assignable<T&, U>),
525
+ BOOST_OPTIONAL_REQUIRES(!optional_detail::is_typed_in_place_factory<U>),
526
+ BOOST_OPTIONAL_REQUIRES(!optional_detail::is_in_place_factory<U>)
527
+ >
528
+ BOOST_OPTIONAL_CXX20_CONSTEXPR optional& operator=(U&& v)
529
+ {
530
+ if (is_initialized())
531
+ contained_val() = optional_detail::forward_<U>(v);
532
+ else
533
+ initialize(optional_detail::forward_<U>(v));
534
+ return *this;
535
+ }
536
+
537
+ template <class F, BOOST_OPTIONAL_REQUIRES(optional_detail::is_in_place_factory<F>)>
538
+ /*non-constexpr (deprecated)*/
539
+ optional& operator=(F&& factory)
540
+ {
541
+ reset();
542
+ boost_optional_detail::construct<value_type>(factory, this->dataptr());
543
+ storage.init_ = true;
544
+ return *this;
545
+ }
546
+
547
+ template <class F, BOOST_OPTIONAL_REQUIRES(optional_detail::is_typed_in_place_factory<F>)>
548
+ /*non-constexpr (deprecated)*/
549
+ optional& operator=(F&& factory)
550
+ {
551
+ reset();
552
+ factory.apply(this->dataptr());
553
+ storage.init_ = true;
554
+ return *this;
555
+ }
556
+
557
+ BOOST_OPTIONAL_CXX20_CONSTEXPR
558
+ void swap(optional& rhs)
559
+ noexcept(::std::is_nothrow_move_constructible<T>::value && noexcept(boost::core::invoke_swap(*rhs, *rhs)))
560
+ {
561
+ if (is_initialized())
562
+ {
563
+ if (rhs.is_initialized())
564
+ boost::core::invoke_swap(contained_val(), rhs.contained_val());
565
+ else
566
+ { rhs.initialize(optional_detail::move_(*this).contained_val()); reset(); }
567
+ }
568
+ else
569
+ {
570
+ if (rhs.is_initialized())
571
+ { initialize(optional_detail::move_(rhs).contained_val()); rhs.reset(); }
572
+ }
573
+ }
574
+
575
+ ~optional() = default; // The destructor in `storage`, based on the specialization
576
+ // will be trivial or not.
577
+
578
+ constexpr bool has_value() const noexcept { return this->is_initialized(); }
579
+ constexpr explicit operator bool() const noexcept { return this->is_initialized(); }
580
+
581
+ constexpr reference_const_type get() const { return BOOST_OPTIONAL_ASSERTED_EXPRESSION(this->is_initialized(), this->contained_val()); }
582
+ BOOST_CXX14_CONSTEXPR reference_type get() { BOOST_ASSERT(this->is_initialized()) ; return this->contained_val(); }
583
+
584
+ //BOOST_DEPRECATED("use `value_or(v)` instead")
585
+ reference_const_type get_value_or (reference_const_type v) const { return this->is_initialized() ? this->contained_val() : v; }
586
+
587
+ //BOOST_DEPRECATED("use `value_or(v)` instead")
588
+ reference_type get_value_or (reference_type v) { return this->is_initialized() ? this->contained_val() : v; }
589
+
590
+ pointer_const_type get_ptr() const { return is_initialized() ? dataptr() : nullptr; }
591
+ pointer_type get_ptr() { return is_initialized() ? dataptr() : nullptr; }
592
+
593
+ constexpr reference_const_type operator*() const& { return this->get(); }
594
+ BOOST_CXX14_CONSTEXPR reference_type operator*() & { return this->get(); }
595
+ BOOST_CXX14_CONSTEXPR reference_type_of_temporary_wrapper operator*() && { return optional_detail::move_(this->get()); }
596
+
597
+ constexpr pointer_const_type operator->() const { return BOOST_OPTIONAL_ASSERTED_EXPRESSION(this->is_initialized(), this->dataptr()); }
598
+ BOOST_CXX14_CONSTEXPR pointer_type operator->() { BOOST_ASSERT(this->is_initialized()) ; return this->dataptr(); }
599
+
600
+ constexpr reference_const_type value() const&
601
+ {
602
+ return this->is_initialized() ? this->get() : (boost::throw_exception(boost::bad_optional_access()), this->get());
603
+ }
604
+
605
+ BOOST_CXX14_CONSTEXPR reference_type value() &
606
+ {
607
+ if (this->is_initialized())
608
+ return this->get();
609
+ else
610
+ boost::throw_exception(boost::bad_optional_access());
611
+ }
612
+
613
+ BOOST_CXX14_CONSTEXPR reference_type_of_temporary_wrapper value() &&
614
+ {
615
+ if (this->is_initialized())
616
+ return optional_detail::move_(this->get());
617
+ else
618
+ boost::throw_exception(boost::bad_optional_access());
619
+ }
620
+
621
+ template <class U = typename ::std::remove_cv<T>::type,
622
+ typename fail_hard_on_nonconvertible<T, U>::type = true>
623
+ constexpr value_type value_or(U&& v) const&
624
+ {
625
+ return this->is_initialized() ? get() : T(optional_detail::forward_<U>(v));
626
+ }
627
+
628
+ template <class U = typename ::std::remove_cv<T>::type>
629
+ BOOST_CXX14_CONSTEXPR value_type value_or(U&& v) &&
630
+ {
631
+ if (this->is_initialized())
632
+ return optional_detail::move_(get());
633
+ else
634
+ return optional_detail::forward_<U>(v);
635
+ }
636
+
637
+ template <typename F,
638
+ typename fail_hard_on_nonconvertible<T, decltype(optional_detail::declval_<F>()())>::type = true>
639
+ constexpr value_type value_or_eval(F f) const&
640
+ {
641
+ return this->is_initialized() ? get() : value_type(f());
642
+ }
643
+
644
+ template <typename F>
645
+ BOOST_CXX14_CONSTEXPR value_type value_or_eval ( F f ) &&
646
+ {
647
+ if (this->is_initialized())
648
+ return optional_detail::move_(get());
649
+ else
650
+ return f();
651
+ }
652
+
653
+ template <typename F>
654
+ BOOST_CXX14_CONSTEXPR optional<typename optional_detail::result_of<F, reference_type>::type>
655
+ map(F f) &
656
+ {
657
+ if (this->has_value())
658
+ return f(get());
659
+ else
660
+ return none;
661
+ }
662
+
663
+ template <typename F>
664
+ constexpr optional<typename optional_detail::result_of<F, reference_const_type>::type>
665
+ map(F f) const&
666
+ {
667
+ return this->has_value() ?
668
+ f(get()) :
669
+ optional<typename optional_detail::result_of<F, reference_const_type>::type>();
670
+ }
671
+
672
+ template <typename F>
673
+ BOOST_CXX14_CONSTEXPR optional<typename optional_detail::result_of<F, reference_type_of_temporary_wrapper>::type>
674
+ map(F f) &&
675
+ {
676
+ if (this->has_value())
677
+ return f(optional_detail::move_(this->get()));
678
+ else
679
+ return none;
680
+ }
681
+
682
+ template <typename F>
683
+ BOOST_CXX14_CONSTEXPR optional<typename optional_detail::result_value_type<F, reference_type>::type>
684
+ flat_map(F f) &
685
+ {
686
+ if (this->has_value())
687
+ return f(get());
688
+ else
689
+ return none;
690
+ }
691
+
692
+ template <typename F>
693
+ constexpr optional<typename optional_detail::result_value_type<F, reference_const_type>::type>
694
+ flat_map(F f) const&
695
+ {
696
+ return this->has_value() ?
697
+ f(get()) :
698
+ optional<typename optional_detail::result_value_type<F, reference_const_type>::type>();
699
+ }
700
+
701
+ template <typename F>
702
+ BOOST_CXX14_CONSTEXPR optional<typename optional_detail::result_value_type<F, reference_type_of_temporary_wrapper>::type>
703
+ flat_map(F f) &&
704
+ {
705
+ if (this->has_value())
706
+ return f(optional_detail::move_(get()));
707
+ else
708
+ return none;
709
+ }
710
+
711
+ };
712
+
713
+ template <typename T>
714
+ BOOST_OPTIONAL_CXX20_CONSTEXPR
715
+ void swap(optional<T>& lhs, optional<T>& rhs)
716
+ noexcept(::std::is_nothrow_move_constructible<T>::value && noexcept(boost::core::invoke_swap(*lhs, *rhs)))
717
+ {
718
+ lhs.swap(rhs);
719
+ }
720
+
721
+ }
722
+
723
+
724
+ #endif // BOOST_OPTIONAL_DETAIL_UNION_OPTIONAL_01FEB2026_HPP