passenger 6.0.0 → 6.0.5

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 (454) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +148 -18
  3. data/CONTRIBUTORS +6 -0
  4. data/bin/passenger-install-nginx-module +1 -1
  5. data/bin/passenger-status +15 -0
  6. data/build/misc.rb +3 -1
  7. data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder/builder.rb +56 -3
  8. data/dev/copy_boost_headers +1 -0
  9. data/package.json +1 -1
  10. data/passenger.gemspec +1 -1
  11. data/resources/templates/error_renderer/with_details/src/bootstrap/bootstrap.css +0 -0
  12. data/resources/templates/error_renderer/with_details/src/bootstrap/bootstrap.js +0 -0
  13. data/resources/templates/error_renderer/with_details/src/bootstrap/config.json +0 -0
  14. data/resources/templates/standalone/http.erb +2 -0
  15. data/resources/templates/standalone/server.erb +1 -0
  16. data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +1 -1
  17. data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +1 -0
  18. data/src/agent/Core/ApplicationPool/Options.h +10 -0
  19. data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +1 -1
  20. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +1 -1
  21. data/src/agent/Core/Config.h +13 -1
  22. data/src/agent/Core/Controller.h +1 -0
  23. data/src/agent/Core/Controller/Config.h +4 -1
  24. data/src/agent/Core/Controller/ForwardResponse.cpp +13 -0
  25. data/src/agent/Core/Controller/InitRequest.cpp +3 -0
  26. data/src/agent/Core/Controller/InitializationAndShutdown.cpp +1 -0
  27. data/src/agent/Core/CoreMain.cpp +2 -1
  28. data/src/agent/Core/OptionParser.h +3 -0
  29. data/src/agent/Core/SpawningKit/Context.h +1 -0
  30. data/src/agent/Core/SpawningKit/Handshake/Perform.h +1 -0
  31. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +1 -1
  32. data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +5 -2
  33. data/src/agent/TempDirToucher/TempDirToucherMain.cpp +2 -0
  34. data/src/agent/Watchdog/Config.h +14 -1
  35. data/src/agent/Watchdog/WatchdogMain.cpp +7 -0
  36. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +10 -0
  37. data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp +10 -0
  38. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +30 -0
  39. data/src/apache2_module/Hooks.cpp +6 -0
  40. data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp +20 -0
  41. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +24 -0
  42. data/src/cxx_supportlib/Constants.h +2 -1
  43. data/src/cxx_supportlib/LoggingKit/Config.h +2 -0
  44. data/src/cxx_supportlib/LoggingKit/Implementation.cpp +15 -9
  45. data/src/cxx_supportlib/ServerKit/HttpChunkedBodyParser.h +1 -1
  46. data/src/cxx_supportlib/SystemTools/ContainerHelpers.h +57 -2
  47. data/src/cxx_supportlib/WebSocketCommandReverseServer.h +11 -7
  48. data/src/cxx_supportlib/oxt/system_calls.cpp +10 -10
  49. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/finder.hpp +0 -4
  50. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +46 -37
  51. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +16 -15
  52. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +45 -26
  53. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/future.hpp +33 -0
  54. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +1 -1
  55. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_buffer_sequence.hpp +38 -14
  56. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +2 -0
  57. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.hpp +1 -1
  58. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +3 -1
  59. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +0 -1
  60. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/bad_address_cast.hpp +6 -1
  61. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +6 -4
  62. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_results.hpp +4 -4
  63. data/src/cxx_supportlib/vendor-modified/boost/asio/packaged_task.hpp +3 -3
  64. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +4 -4
  65. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +4 -4
  66. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +8 -6
  67. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_base.hpp +17 -0
  68. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +50 -5
  69. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +2 -1
  70. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +1 -1
  71. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +3 -2
  72. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
  73. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +4 -3
  74. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +5 -3
  75. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86_dcas.hpp +13 -12
  76. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/chrono.hpp +10 -10
  77. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp +34 -34
  78. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/thread_clock.hpp +4 -4
  79. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/chrono.hpp +8 -8
  80. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp +27 -27
  81. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/thread_clock.hpp +4 -4
  82. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/system.hpp +5 -4
  83. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +1 -1
  84. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer.hpp +3 -3
  85. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/allocators.hpp +89 -0
  86. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/base.hpp +83 -74
  87. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/details.hpp +21 -33
  88. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/space_optimized.hpp +5 -5
  89. data/src/cxx_supportlib/vendor-modified/boost/concept/assert.hpp +1 -1
  90. data/src/cxx_supportlib/vendor-modified/boost/concept/detail/general.hpp +3 -3
  91. data/src/cxx_supportlib/vendor-modified/boost/concept/detail/has_constraints.hpp +3 -3
  92. data/src/cxx_supportlib/vendor-modified/boost/concept/usage.hpp +1 -1
  93. data/src/cxx_supportlib/vendor-modified/boost/concept_check.hpp +19 -19
  94. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +8 -0
  95. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +5 -2
  96. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +5 -1
  97. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +6 -2
  98. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/comeau.hpp +1 -1
  99. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +4 -0
  100. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +368 -52
  101. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +4 -1
  102. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +6 -3
  103. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +3 -0
  104. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/greenhills.hpp +1 -1
  105. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/hp_acc.hpp +1 -1
  106. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +6 -1
  107. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/kai.hpp +1 -1
  108. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +4 -1
  109. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +4 -1
  110. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +3 -3
  111. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +3 -0
  112. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +3 -0
  113. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +4 -1
  114. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +9 -4
  115. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +4 -0
  116. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp_zos.hpp +1 -0
  117. data/src/cxx_supportlib/vendor-modified/boost/config/detail/select_compiler_config.hpp +1 -2
  118. data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +13 -0
  119. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +2 -2
  120. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +14 -4
  121. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +4 -4
  122. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +262 -2
  123. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +4 -3
  124. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +1 -1
  125. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +7 -0
  126. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +22 -19
  127. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +833 -459
  128. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +24 -6
  129. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocator_version_traits.hpp +2 -1
  130. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +61 -5
  131. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +33 -8
  132. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +132 -41
  133. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator.hpp +16 -0
  134. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +54 -0
  135. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +58 -0
  136. data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +28 -23
  137. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +167 -115
  138. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +55 -0
  139. data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +3 -0
  140. data/src/cxx_supportlib/vendor-modified/boost/container/detail/thread_mutex.hpp +181 -0
  141. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +167 -29
  142. data/src/cxx_supportlib/vendor-modified/boost/container/detail/type_traits.hpp +2 -0
  143. data/src/cxx_supportlib/vendor-modified/boost/container/detail/variadic_templates_tools.hpp +1 -1
  144. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +18 -0
  145. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +389 -3
  146. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +262 -0
  147. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +52 -8
  148. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +364 -0
  149. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +4 -2
  150. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +1 -1
  151. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/synchronized_pool_resource.hpp +3 -2
  152. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +286 -6
  153. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +56 -8
  154. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +43 -6
  155. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +100 -31
  156. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +2 -1
  157. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +126 -69
  158. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +75 -51
  159. data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +136 -0
  160. data/src/cxx_supportlib/vendor-modified/boost/core/exchange.hpp +49 -0
  161. data/src/cxx_supportlib/vendor-modified/boost/core/explicit_operator_bool.hpp +9 -0
  162. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +101 -130
  163. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test_trait.hpp +2 -2
  164. data/src/cxx_supportlib/vendor-modified/boost/core/noncopyable.hpp +16 -1
  165. data/src/cxx_supportlib/vendor-modified/boost/core/quick_exit.hpp +59 -0
  166. data/src/cxx_supportlib/vendor-modified/boost/core/ref.hpp +2 -1
  167. data/src/cxx_supportlib/vendor-modified/boost/core/swap.hpp +9 -2
  168. data/src/cxx_supportlib/vendor-modified/boost/core/typeinfo.hpp +26 -10
  169. data/src/cxx_supportlib/vendor-modified/boost/date_time/compiler_config.hpp +5 -0
  170. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_duration.hpp +3 -3
  171. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_duration.hpp +1 -1
  172. data/src/cxx_supportlib/vendor-modified/boost/detail/basic_pointerbuf.hpp +1 -1
  173. data/src/cxx_supportlib/vendor-modified/boost/detail/indirect_traits.hpp +38 -47
  174. data/src/cxx_supportlib/vendor-modified/boost/detail/lcast_precision.hpp +5 -5
  175. data/src/cxx_supportlib/vendor-modified/boost/detail/reference_content.hpp +7 -7
  176. data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +62 -58
  177. data/src/cxx_supportlib/vendor-modified/boost/function.hpp +1 -1
  178. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +29 -29
  179. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +38 -40
  180. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_rt.hpp +4 -4
  181. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +44 -44
  182. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +39 -39
  183. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +15 -15
  184. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +7 -7
  185. data/src/cxx_supportlib/vendor-modified/boost/intrusive/derivation_value_traits.hpp +1 -1
  186. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +14 -14
  187. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/avltree_node.hpp +9 -9
  188. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +7 -7
  189. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_iterator.hpp +1 -1
  190. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_node.hpp +2 -2
  191. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_cloner_disposer.hpp +2 -2
  192. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/rbtree_node.hpp +6 -6
  193. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/simple_disposers.hpp +1 -1
  194. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_iterator.hpp +1 -1
  195. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_node.hpp +1 -1
  196. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_iterator.hpp +1 -1
  197. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_node.hpp +3 -3
  198. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +33 -14
  199. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +12 -12
  200. data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +4 -4
  201. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_plus_bits.hpp +3 -0
  202. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +39 -39
  203. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +61 -61
  204. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +4 -4
  205. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +66 -66
  206. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +54 -54
  207. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +6 -2
  208. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +3 -3
  209. data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +1 -1
  210. data/src/cxx_supportlib/vendor-modified/boost/iterator/distance.hpp +65 -0
  211. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +1 -1
  212. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +1 -1
  213. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +23 -23
  214. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +4 -4
  215. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +13 -13
  216. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +1 -1
  217. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +5 -4
  218. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +1 -1
  219. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +5 -5
  220. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +5 -2
  221. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +18 -13
  222. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/cregex.cpp +4 -4
  223. data/src/cxx_supportlib/vendor-modified/boost/libs/system/src/error_code.cpp +16 -5
  224. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/future.cpp +1 -1
  225. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +14 -8
  226. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/tss_null.cpp +2 -2
  227. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/detail/fp_traits.hpp +13 -13
  228. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/math_fwd.hpp +27 -0
  229. data/src/cxx_supportlib/vendor-modified/boost/math/tools/config.hpp +1 -1
  230. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +29 -6
  231. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +12 -3
  232. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +1 -1
  233. data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +1 -1
  234. data/src/cxx_supportlib/vendor-modified/boost/move/algorithm.hpp +1 -1
  235. data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +8 -8
  236. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +2 -0
  237. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +3 -3
  238. data/src/cxx_supportlib/vendor-modified/boost/mpl/assert.hpp +23 -3
  239. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/experimental_traits.hpp +9 -3
  240. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +10 -11
  241. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +20 -1
  242. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +3 -3
  243. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +211 -101
  244. data/src/cxx_supportlib/vendor-modified/boost/parameter/python.hpp +5 -6
  245. data/src/cxx_supportlib/vendor-modified/boost/pool/detail/mutex.hpp +119 -25
  246. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture.h +1 -0
  247. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/arm.h +5 -0
  248. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/ptx.h +44 -0
  249. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler.h +1 -0
  250. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/compaq.h +1 -1
  251. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/nvcc.h +73 -0
  252. data/src/cxx_supportlib/vendor-modified/boost/predef/detail/endian_compat.h +3 -1
  253. data/src/cxx_supportlib/vendor-modified/boost/predef/language.h +1 -0
  254. data/src/cxx_supportlib/vendor-modified/boost/predef/language/cuda.h +52 -0
  255. data/src/cxx_supportlib/vendor-modified/boost/predef/make.h +4 -0
  256. data/src/cxx_supportlib/vendor-modified/boost/predef/os/cygwin.h +6 -1
  257. data/src/cxx_supportlib/vendor-modified/boost/predef/other/endian.h +1 -2
  258. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  259. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/config.hpp +17 -8
  260. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/stringize.hpp +4 -0
  261. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/wstringize.hpp +4 -0
  262. data/src/cxx_supportlib/vendor-modified/boost/random/detail/gray_coded_qrng.hpp +166 -0
  263. data/src/cxx_supportlib/vendor-modified/boost/random/detail/niederreiter_base2_table.hpp +513 -0
  264. data/src/cxx_supportlib/vendor-modified/boost/random/detail/qrng_base.hpp +291 -0
  265. data/src/cxx_supportlib/vendor-modified/boost/random/detail/sobol_table.hpp +4106 -0
  266. data/src/cxx_supportlib/vendor-modified/boost/random/faure.hpp +367 -0
  267. data/src/cxx_supportlib/vendor-modified/boost/random/niederreiter_base2.hpp +360 -0
  268. data/src/cxx_supportlib/vendor-modified/boost/random/sobol.hpp +237 -0
  269. data/src/cxx_supportlib/vendor-modified/boost/range/as_literal.hpp +43 -0
  270. data/src/cxx_supportlib/vendor-modified/boost/range/begin.hpp +13 -5
  271. data/src/cxx_supportlib/vendor-modified/boost/range/concepts.hpp +1 -1
  272. data/src/cxx_supportlib/vendor-modified/boost/range/detail/common.hpp +1 -3
  273. data/src/cxx_supportlib/vendor-modified/boost/range/detail/implementation_help.hpp +2 -2
  274. data/src/cxx_supportlib/vendor-modified/boost/range/distance.hpp +11 -5
  275. data/src/cxx_supportlib/vendor-modified/boost/range/end.hpp +14 -6
  276. data/src/cxx_supportlib/vendor-modified/boost/range/has_range_iterator.hpp +3 -3
  277. data/src/cxx_supportlib/vendor-modified/boost/ratio/config.hpp +6 -2
  278. data/src/cxx_supportlib/vendor-modified/boost/rational.hpp +55 -37
  279. data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +3 -2
  280. data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +11 -1
  281. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex.hpp +7 -1
  282. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +3 -1
  283. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +5 -2
  284. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/fileiter.hpp +0 -3
  285. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/instances.hpp +15 -4
  286. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +1 -2
  287. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_results.hpp +12 -3
  288. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +7 -2
  289. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +7 -3
  290. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +6 -2
  291. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +0 -5
  292. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_iterator.hpp +0 -8
  293. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_raw_buffer.hpp +3 -3
  294. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_split.hpp +3 -1
  295. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_token_iterator.hpp +0 -8
  296. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +12 -11
  297. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +7 -4
  298. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_iterator.hpp +1 -9
  299. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_token_iterator.hpp +2 -10
  300. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +2 -0
  301. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +60 -115
  302. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_counted_base.hpp +3 -3
  303. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +2 -1
  304. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_aix.hpp +2 -1
  305. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_clang.hpp +2 -1
  306. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +2 -1
  307. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +2 -1
  308. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +2 -1
  309. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +2 -1
  310. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +2 -1
  311. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +2 -1
  312. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +2 -1
  313. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_nt.hpp +2 -1
  314. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_pt.hpp +2 -1
  315. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +2 -1
  316. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +2 -1
  317. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_spin.hpp +2 -1
  318. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp +2 -1
  319. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_sync.hpp +2 -1
  320. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +2 -1
  321. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +3 -3
  322. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/yield_k.hpp +14 -8
  323. data/src/cxx_supportlib/vendor-modified/boost/system/config.hpp +4 -24
  324. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +57 -0
  325. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category.hpp +101 -0
  326. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_interoperability.hpp +141 -0
  327. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_posix.hpp +132 -0
  328. data/src/cxx_supportlib/vendor-modified/boost/system/error_code.hpp +775 -588
  329. data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +4 -4
  330. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/config.hpp +6 -0
  331. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/move.hpp +13 -6
  332. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/nullary_function.hpp +8 -3
  333. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +3 -1
  334. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread_safety.hpp +160 -0
  335. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/tss_hooks.hpp +2 -2
  336. data/src/cxx_supportlib/vendor-modified/boost/thread/exceptions.hpp +3 -3
  337. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/basic_thread_pool.hpp +24 -1
  338. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +10 -1
  339. data/src/cxx_supportlib/vendor-modified/boost/thread/lock_guard.hpp +4 -4
  340. data/src/cxx_supportlib/vendor-modified/boost/thread/lockable_traits.hpp +31 -0
  341. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable.hpp +2 -2
  342. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable_fwd.hpp +2 -2
  343. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/mutex.hpp +8 -53
  344. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +73 -4
  345. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/recursive_mutex.hpp +6 -6
  346. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_data.hpp +14 -9
  347. data/src/cxx_supportlib/vendor-modified/boost/thread/xtime.hpp +6 -6
  348. data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +9 -8
  349. data/src/cxx_supportlib/vendor-modified/boost/token_functions.hpp +1 -0
  350. data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +21 -19
  351. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/common_arithmetic_type.hpp +3 -1
  352. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/config.hpp +9 -0
  353. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/detector.hpp +1 -1
  354. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_postfix_operator.hpp +55 -0
  355. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_prefix_operator.hpp +72 -0
  356. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_cxx_03.hpp +108 -0
  357. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_cxx_11.hpp +501 -0
  358. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_msvc10_fix.hpp +30 -0
  359. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_likely_lambda.hpp +2 -2
  360. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_member_function_pointer_cxx_03.hpp +117 -0
  361. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_member_function_pointer_cxx_11.hpp +557 -0
  362. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_rvalue_reference_msvc10_fix.hpp +43 -0
  363. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detected.hpp +1 -1
  364. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detected_or.hpp +1 -1
  365. data/src/cxx_supportlib/vendor-modified/boost/type_traits/enable_if.hpp +37 -0
  366. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_dereference.hpp +344 -0
  367. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus.hpp +5 -0
  368. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus_assign.hpp +5 -0
  369. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_plus_assign.hpp +5 -0
  370. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_post_decrement.hpp +21 -0
  371. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_post_increment.hpp +21 -0
  372. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_pre_decrement.hpp +21 -0
  373. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_pre_increment.hpp +22 -0
  374. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_assign.hpp +1 -1
  375. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_constructor.hpp +2 -1
  376. data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_constant.hpp +5 -15
  377. data/src/cxx_supportlib/vendor-modified/boost/type_traits/intrinsics.hpp +16 -6
  378. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complete.hpp +3 -1
  379. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_copy_assignable.hpp +3 -4
  380. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_copy_constructible.hpp +4 -6
  381. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected.hpp +1 -1
  382. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected_convertible.hpp +1 -1
  383. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected_exact.hpp +1 -1
  384. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_final.hpp +1 -1
  385. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_function.hpp +4 -79
  386. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_member_function_pointer.hpp +3 -97
  387. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_noncopyable.hpp +39 -0
  388. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_assignable.hpp +2 -2
  389. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_constructible.hpp +2 -2
  390. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_rvalue_reference.hpp +4 -0
  391. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_virtual_base_of.hpp +104 -63
  392. data/src/cxx_supportlib/vendor-modified/boost/type_traits/make_void.hpp +1 -1
  393. data/src/cxx_supportlib/vendor-modified/boost/type_traits/nonesuch.hpp +1 -1
  394. data/src/cxx_supportlib/vendor-modified/boost/typeof/constant.hpp +26 -0
  395. data/src/cxx_supportlib/vendor-modified/boost/typeof/dmc/typeof_impl.hpp +4 -4
  396. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode.hpp +0 -3
  397. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode_params.hpp +1 -1
  398. data/src/cxx_supportlib/vendor-modified/boost/typeof/int_encoding.hpp +4 -5
  399. data/src/cxx_supportlib/vendor-modified/boost/typeof/modifiers.hpp +5 -5
  400. data/src/cxx_supportlib/vendor-modified/boost/typeof/msvc/typeof_impl.hpp +9 -9
  401. data/src/cxx_supportlib/vendor-modified/boost/typeof/native.hpp +3 -3
  402. data/src/cxx_supportlib/vendor-modified/boost/typeof/pointers_data_members.hpp +2 -2
  403. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions_iterate.hpp +6 -6
  404. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_mem_functions.hpp +1 -1
  405. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_encoding.hpp +4 -4
  406. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_template_param.hpp +2 -2
  407. data/src/cxx_supportlib/vendor-modified/boost/typeof/type_encoding.hpp +2 -2
  408. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof_impl.hpp +16 -16
  409. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector.hpp +5 -5
  410. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector100.hpp +201 -201
  411. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector150.hpp +301 -301
  412. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector200.hpp +401 -401
  413. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector50.hpp +101 -101
  414. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +3 -0
  415. data/src/cxx_supportlib/vendor-modified/boost/utility/string_ref.hpp +2 -0
  416. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +26 -6
  417. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  418. data/src/helper-scripts/prespawn +1 -0
  419. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +40 -0
  420. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c +26 -0
  421. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +48 -0
  422. data/src/nginx_module/Configuration.c +9 -5
  423. data/src/nginx_module/ContentHandler.c +5 -1
  424. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +15 -0
  425. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +15 -0
  426. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +28 -0
  427. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +6 -0
  428. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +11 -0
  429. data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c +11 -0
  430. data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c +23 -0
  431. data/src/nginx_module/MainConfig/AutoGeneratedStruct.h +8 -0
  432. data/src/nginx_module/ngx_http_passenger_module.c +2 -0
  433. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/logger.js +0 -0
  434. data/src/ruby_native_extension/extconf.rb +7 -0
  435. data/src/ruby_supportlib/phusion_passenger.rb +7 -7
  436. data/src/ruby_supportlib/phusion_passenger/admin_tools/instance_registry.rb +8 -0
  437. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +23 -0
  438. data/src/ruby_supportlib/phusion_passenger/constants.rb +1 -0
  439. data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +1 -3
  440. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +37 -0
  441. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +1 -1
  442. data/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb +10 -0
  443. data/src/ruby_supportlib/phusion_passenger/request_handler.rb +2 -2
  444. data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +5 -0
  445. data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +11 -0
  446. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +3 -0
  447. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/nginx_engine.rb +1 -1
  448. data/src/ruby_supportlib/phusion_passenger/utils/tee_input.rb +6 -0
  449. data/src/ruby_supportlib/phusion_passenger/utils/unseekable_socket.rb +15 -11
  450. metadata +48 -7
  451. data/src/cxx_supportlib/vendor-modified/boost/call_traits.hpp +0 -20
  452. data/src/cxx_supportlib/vendor-modified/boost/detail/call_traits.hpp +0 -172
  453. data/src/cxx_supportlib/vendor-modified/boost/detail/no_exceptions_support.hpp +0 -17
  454. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.ipp +0 -496
@@ -276,10 +276,11 @@ class small_vector_allocator
276
276
  using Allocator::allocate_many;
277
277
  using Allocator::deallocate_many;*/
278
278
 
279
- BOOST_CONTAINER_FORCEINLINE bool is_internal_storage(pointer p) const
279
+ BOOST_CONTAINER_FORCEINLINE bool is_internal_storage(const_pointer p) const
280
280
  { return this->internal_storage() == p; }
281
281
 
282
- pointer internal_storage() const
282
+ BOOST_CONTAINER_FORCEINLINE
283
+ const_pointer internal_storage() const
283
284
  {
284
285
  typedef typename Allocator::value_type value_type;
285
286
  typedef typename allocator_traits_type::size_type size_type;
@@ -292,6 +293,21 @@ class small_vector_allocator
292
293
  const derived_type &d_base = static_cast<const derived_type &>(v_base);
293
294
  return d_base.internal_storage();
294
295
  }
296
+
297
+ BOOST_CONTAINER_FORCEINLINE
298
+ pointer internal_storage()
299
+ {
300
+ typedef typename Allocator::value_type value_type;
301
+ typedef typename allocator_traits_type::size_type size_type;
302
+ typedef vector_alloc_holder< small_vector_allocator<Allocator>, size_type > vector_alloc_holder_t;
303
+ typedef vector<value_type, small_vector_allocator<Allocator> > vector_base;
304
+ typedef small_vector_base<value_type, Allocator> derived_type;
305
+ //
306
+ vector_alloc_holder_t &v_holder = static_cast<vector_alloc_holder_t &>(*this);
307
+ vector_base &v_base = reinterpret_cast<vector_base &>(v_holder);
308
+ derived_type &d_base = static_cast<derived_type &>(v_base);
309
+ return d_base.internal_storage();
310
+ }
295
311
  #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
296
312
  };
297
313
 
@@ -328,17 +344,34 @@ class small_vector_base
328
344
  public:
329
345
  //Make it public as it will be inherited by small_vector and container
330
346
  //must have this public member
331
- typedef typename allocator_traits<SecondaryAllocator>::pointer pointer;
347
+ typedef typename allocator_traits<SecondaryAllocator>::pointer pointer;
348
+ typedef typename allocator_traits<SecondaryAllocator>::const_pointer const_pointer;
349
+ typedef typename allocator_traits<SecondaryAllocator>::void_pointer void_pointer;
350
+ typedef typename allocator_traits<SecondaryAllocator>::const_void_pointer const_void_pointer;
332
351
 
333
352
  private:
334
353
  BOOST_COPYABLE_AND_MOVABLE(small_vector_base)
335
354
 
336
355
  friend class small_vector_allocator<SecondaryAllocator>;
337
356
 
338
- pointer internal_storage() const BOOST_NOEXCEPT_OR_NOTHROW
357
+ BOOST_CONTAINER_FORCEINLINE
358
+ const_pointer internal_storage() const BOOST_NOEXCEPT_OR_NOTHROW
359
+ {
360
+ typedef typename boost::intrusive::pointer_traits<const_pointer>::template
361
+ rebind_pointer<const unsigned char>::type const_char_pointer;
362
+ const_void_pointer void_p = boost::intrusive::pointer_traits<const_char_pointer>::
363
+ pointer_to(*m_storage_start.data);
364
+ return boost::intrusive::pointer_traits<const_pointer>::static_cast_from(void_p);
365
+ }
366
+
367
+ BOOST_CONTAINER_FORCEINLINE
368
+ pointer internal_storage() BOOST_NOEXCEPT_OR_NOTHROW
339
369
  {
340
- return boost::intrusive::pointer_traits<pointer>::pointer_to
341
- (*const_cast<T*>(static_cast<const T*>(static_cast<const void*>(m_storage_start.data))));
370
+ typedef typename boost::intrusive::pointer_traits<pointer>::template
371
+ rebind_pointer<unsigned char>::type char_pointer;
372
+ void_pointer void_p = boost::intrusive::pointer_traits<char_pointer>::
373
+ pointer_to(*m_storage_start.data);
374
+ return boost::intrusive::pointer_traits<pointer>::static_cast_from(void_p);
342
375
  }
343
376
 
344
377
  typedef vector<T, small_vector_allocator<SecondaryAllocator> > base_type;
@@ -575,6 +608,7 @@ class small_vector : public small_vector_base
575
608
  { this->move_construct_impl(other, other.get_stored_allocator()); }
576
609
 
577
610
  BOOST_CONTAINER_FORCEINLINE small_vector(BOOST_RV_REF(small_vector) other)
611
+ BOOST_NOEXCEPT_IF(boost::container::dtl::is_nothrow_move_assignable<value_type>::value)
578
612
  : base_type(initial_capacity_t(), internal_capacity(), ::boost::move(other.get_stored_allocator()))
579
613
  { this->move_construct_impl(other, other.get_stored_allocator()); }
580
614
 
@@ -594,6 +628,9 @@ class small_vector : public small_vector_base
594
628
  { return static_cast<small_vector&>(this->base_type::operator=(static_cast<base_type const&>(other))); }
595
629
 
596
630
  BOOST_CONTAINER_FORCEINLINE small_vector& operator=(BOOST_RV_REF(small_vector) other)
631
+ BOOST_NOEXCEPT_IF(boost::container::dtl::is_nothrow_move_assignable<value_type>::value
632
+ && (allocator_traits_type::propagate_on_container_move_assignment::value
633
+ || allocator_traits_type::is_always_equal::value))
597
634
  { return static_cast<small_vector&>(this->base_type::operator=(BOOST_MOVE_BASE(base_type, other))); }
598
635
 
599
636
  BOOST_CONTAINER_FORCEINLINE small_vector& operator=(const base_type &other)
@@ -114,12 +114,14 @@ struct node_base
114
114
  typedef typename void_ptr_traits::
115
115
  template rebind_pointer
116
116
  <node_base>::type node_base_ptr;
117
+
118
+ public:
117
119
  typedef typename void_ptr_traits::
118
120
  template rebind_pointer
119
121
  <node_base_ptr>::type node_base_ptr_ptr;
120
122
 
121
123
  public:
122
- node_base(const node_base_ptr_ptr &n)
124
+ explicit node_base(const node_base_ptr_ptr &n)
123
125
  : up(n)
124
126
  {}
125
127
 
@@ -130,6 +132,7 @@ struct node_base
130
132
  node_base_ptr_ptr up;
131
133
  };
132
134
 
135
+
133
136
  template<typename Pointer>
134
137
  struct node
135
138
  : public node_base
@@ -137,11 +140,52 @@ struct node
137
140
  rebind_pointer<void>::type
138
141
  >
139
142
  {
140
- private:
141
- node();
142
-
143
143
  public:
144
- typename ::boost::intrusive::pointer_traits<Pointer>::element_type value;
144
+ typedef typename ::boost::intrusive::pointer_traits<Pointer>::element_type T;
145
+ typedef node_base
146
+ <typename ::boost::intrusive::pointer_traits<Pointer>::template
147
+ rebind_pointer<void>::type
148
+ > hook_type;
149
+
150
+ typedef typename boost::container::dtl::aligned_storage
151
+ <sizeof(T), boost::container::dtl::alignment_of<T>::value>::type storage_t;
152
+ storage_t m_storage;
153
+
154
+ BOOST_CONTAINER_FORCEINLINE explicit node(const typename hook_type::node_base_ptr_ptr &n)
155
+ : hook_type(n)
156
+ {}
157
+
158
+ BOOST_CONTAINER_FORCEINLINE node()
159
+ {}
160
+
161
+ #if defined(BOOST_GCC) && (BOOST_GCC >= 40600) && (BOOST_GCC < 80000)
162
+ #pragma GCC diagnostic push
163
+ #pragma GCC diagnostic ignored "-Wstrict-aliasing"
164
+ #define BOOST_CONTAINER_DISABLE_ALIASING_WARNING
165
+ # endif
166
+
167
+ BOOST_CONTAINER_FORCEINLINE T &get_data()
168
+ { return *reinterpret_cast<T*>(this->m_storage.data); }
169
+
170
+ BOOST_CONTAINER_FORCEINLINE const T &get_data() const
171
+ { return *reinterpret_cast<const T*>(this->m_storage.data); }
172
+
173
+ BOOST_CONTAINER_FORCEINLINE T *get_data_ptr()
174
+ { return reinterpret_cast<T*>(this->m_storage.data); }
175
+
176
+ BOOST_CONTAINER_FORCEINLINE const T *get_data_ptr() const
177
+ { return reinterpret_cast<T*>(this->m_storage.data); }
178
+
179
+ BOOST_CONTAINER_FORCEINLINE ~node()
180
+ { reinterpret_cast<T*>(this->m_storage.data)->~T(); }
181
+
182
+ #if defined(BOOST_CONTAINER_DISABLE_ALIASING_WARNING)
183
+ #pragma GCC diagnostic pop
184
+ #undef BOOST_CONTAINER_DISABLE_ALIASING_WARNING
185
+ # endif
186
+
187
+ BOOST_CONTAINER_FORCEINLINE void destroy_header()
188
+ { static_cast<hook_type*>(this)->~hook_type(); }
145
189
  };
146
190
 
147
191
  template<class VoidPtr, class VoidAllocator>
@@ -290,7 +334,7 @@ class stable_vector_iterator
290
334
  public:
291
335
  //Pointer like operators
292
336
  reference operator*() const BOOST_NOEXCEPT_OR_NOTHROW
293
- { return node_pointer()->value; }
337
+ { return node_pointer()->get_data(); }
294
338
 
295
339
  pointer operator->() const BOOST_NOEXCEPT_OR_NOTHROW
296
340
  { return ptr_traits::pointer_to(this->operator*()); }
@@ -317,7 +361,7 @@ class stable_vector_iterator
317
361
  { stable_vector_iterator tmp(*this); --*this; return stable_vector_iterator(tmp); }
318
362
 
319
363
  reference operator[](difference_type off) const BOOST_NOEXCEPT_OR_NOTHROW
320
- { return node_ptr_traits::static_cast_from(this->m_pn->up[off])->value; }
364
+ { return node_ptr_traits::static_cast_from(this->m_pn->up[off])->get_data(); }
321
365
 
322
366
  stable_vector_iterator& operator+=(difference_type off) BOOST_NOEXCEPT_OR_NOTHROW
323
367
  {
@@ -793,7 +837,7 @@ class stable_vector
793
837
  BOOST_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value
794
838
  || allocator_traits_type::is_always_equal::value)
795
839
  {
796
- //for move constructor, no aliasing (&x != this) is assummed.
840
+ //for move constructor, no aliasing (&x != this) is assumed.
797
841
  BOOST_ASSERT(this != &x);
798
842
  node_allocator_type &this_alloc = this->priv_node_alloc();
799
843
  node_allocator_type &x_alloc = x.priv_node_alloc();
@@ -1198,7 +1242,7 @@ class stable_vector
1198
1242
  reference front() BOOST_NOEXCEPT_OR_NOTHROW
1199
1243
  {
1200
1244
  BOOST_ASSERT(!this->empty());
1201
- return static_cast<node_reference>(*this->index.front()).value;
1245
+ return static_cast<node_reference>(*this->index.front()).get_data();
1202
1246
  }
1203
1247
 
1204
1248
  //! <b>Requires</b>: !empty()
@@ -1212,7 +1256,7 @@ class stable_vector
1212
1256
  const_reference front() const BOOST_NOEXCEPT_OR_NOTHROW
1213
1257
  {
1214
1258
  BOOST_ASSERT(!this->empty());
1215
- return static_cast<const_node_reference>(*this->index.front()).value;
1259
+ return static_cast<const_node_reference>(*this->index.front()).get_data();
1216
1260
  }
1217
1261
 
1218
1262
  //! <b>Requires</b>: !empty()
@@ -1226,7 +1270,7 @@ class stable_vector
1226
1270
  reference back() BOOST_NOEXCEPT_OR_NOTHROW
1227
1271
  {
1228
1272
  BOOST_ASSERT(!this->empty());
1229
- return static_cast<node_reference>(*this->index[this->size()-1u]).value;
1273
+ return static_cast<node_reference>(*this->index[this->size()-1u]).get_data();
1230
1274
  }
1231
1275
 
1232
1276
  //! <b>Requires</b>: !empty()
@@ -1240,7 +1284,7 @@ class stable_vector
1240
1284
  const_reference back() const BOOST_NOEXCEPT_OR_NOTHROW
1241
1285
  {
1242
1286
  BOOST_ASSERT(!this->empty());
1243
- return static_cast<const_node_reference>(*this->index[this->size()-1u]).value;
1287
+ return static_cast<const_node_reference>(*this->index[this->size()-1u]).get_data();
1244
1288
  }
1245
1289
 
1246
1290
  //! <b>Requires</b>: size() > n.
@@ -1254,7 +1298,7 @@ class stable_vector
1254
1298
  reference operator[](size_type n) BOOST_NOEXCEPT_OR_NOTHROW
1255
1299
  {
1256
1300
  BOOST_ASSERT(this->size() > n);
1257
- return static_cast<node_reference>(*this->index[n]).value;
1301
+ return static_cast<node_reference>(*this->index[n]).get_data();
1258
1302
  }
1259
1303
 
1260
1304
  //! <b>Requires</b>: size() > n.
@@ -1268,7 +1312,7 @@ class stable_vector
1268
1312
  const_reference operator[](size_type n) const BOOST_NOEXCEPT_OR_NOTHROW
1269
1313
  {
1270
1314
  BOOST_ASSERT(this->size() > n);
1271
- return static_cast<const_node_reference>(*this->index[n]).value;
1315
+ return static_cast<const_node_reference>(*this->index[n]).get_data();
1272
1316
  }
1273
1317
 
1274
1318
  //! <b>Requires</b>: size() >= n.
@@ -1956,8 +2000,7 @@ class stable_vector
1956
2000
  void priv_destroy_node(const node_type &n)
1957
2001
  {
1958
2002
  allocator_traits<node_allocator_type>::
1959
- destroy(this->priv_node_alloc(), dtl::addressof(n.value));
1960
- static_cast<const node_base_type*>(&n)->~node_base_type();
2003
+ destroy(this->priv_node_alloc(), &n);
1961
2004
  }
1962
2005
 
1963
2006
  void priv_delete_node(const node_ptr &n)
@@ -1969,26 +2012,40 @@ class stable_vector
1969
2012
  template<class Iterator>
1970
2013
  void priv_build_node_from_it(const node_ptr &p, const index_iterator &up_index, const Iterator &it)
1971
2014
  {
1972
- //This can throw
1973
- boost::container::construct_in_place
1974
- ( this->priv_node_alloc()
1975
- , dtl::addressof(p->value)
1976
- , it);
1977
- //This does not throw
1978
- ::new(static_cast<node_base_type*>(boost::movelib::to_raw_pointer(p)), boost_container_new_t())
1979
- node_base_type(index_traits_type::ptr_to_node_base_ptr(*up_index));
2015
+ node_type *praw = ::new(boost::movelib::iterator_to_raw_pointer(p), boost_container_new_t())
2016
+ node_type(index_traits_type::ptr_to_node_base_ptr(*up_index));
2017
+ BOOST_TRY{
2018
+ //This can throw
2019
+ boost::container::construct_in_place
2020
+ ( this->priv_node_alloc()
2021
+ , praw->get_data_ptr()
2022
+ , it);
2023
+ }
2024
+ BOOST_CATCH(...) {
2025
+ praw->destroy_header();
2026
+ this->priv_node_alloc().deallocate(p, 1);
2027
+ BOOST_RETHROW
2028
+ }
2029
+ BOOST_CATCH_END
1980
2030
  }
1981
2031
 
1982
2032
  template<class ValueConvertible>
1983
2033
  void priv_build_node_from_convertible(const node_ptr &p, BOOST_FWD_REF(ValueConvertible) value_convertible)
1984
2034
  {
1985
- //This can throw
1986
- boost::container::allocator_traits<node_allocator_type>::construct
1987
- ( this->priv_node_alloc()
1988
- , dtl::addressof(p->value)
1989
- , ::boost::forward<ValueConvertible>(value_convertible));
1990
- //This does not throw
1991
- ::new(static_cast<node_base_type*>(boost::movelib::to_raw_pointer(p)), boost_container_new_t()) node_base_type;
2035
+ node_type *praw = ::new(boost::movelib::iterator_to_raw_pointer(p), boost_container_new_t()) node_type;
2036
+ BOOST_TRY{
2037
+ //This can throw
2038
+ boost::container::allocator_traits<node_allocator_type>::construct
2039
+ ( this->priv_node_alloc()
2040
+ , p->get_data_ptr()
2041
+ , ::boost::forward<ValueConvertible>(value_convertible));
2042
+ }
2043
+ BOOST_CATCH(...) {
2044
+ praw->destroy_header();
2045
+ this->priv_node_alloc().deallocate(p, 1);
2046
+ BOOST_RETHROW
2047
+ }
2048
+ BOOST_CATCH_END
1992
2049
  }
1993
2050
 
1994
2051
  void priv_swap_members(stable_vector &x)
@@ -2085,6 +2142,18 @@ class stable_vector
2085
2142
  #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
2086
2143
  };
2087
2144
 
2145
+ #ifndef BOOST_CONTAINER_NO_CXX17_CTAD
2146
+
2147
+ template <typename InputIterator>
2148
+ stable_vector(InputIterator, InputIterator) ->
2149
+ stable_vector<typename iterator_traits<InputIterator>::value_type>;
2150
+
2151
+ template <typename InputIterator, typename Allocator>
2152
+ stable_vector(InputIterator, InputIterator, Allocator const&) ->
2153
+ stable_vector<typename iterator_traits<InputIterator>::value_type, Allocator>;
2154
+
2155
+ #endif
2156
+
2088
2157
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
2089
2158
 
2090
2159
  #undef STABLE_VECTOR_CHECK_INVARIANT
@@ -96,7 +96,7 @@ class static_storage_allocator
96
96
  //! Insertion beyond the capacity result in throwing std::bad_alloc() if exceptions are enabled or
97
97
  //! calling throw_bad_alloc() if not enabled.
98
98
  //!
99
- //! std::out_of_range is thrown if out of bound access is performed in <code>at()</code> if exceptions are
99
+ //! std::out_of_range is thrown if out of bounds access is performed in <code>at()</code> if exceptions are
100
100
  //! enabled, throw_out_of_range() if not enabled.
101
101
  //!
102
102
  //!@tparam Value The type of element that will be stored.
@@ -372,6 +372,7 @@ public:
372
372
  //! @par Complexity
373
373
  //! Linear O(N).
374
374
  BOOST_CONTAINER_FORCEINLINE static_vector & operator=(BOOST_RV_REF(static_vector) other)
375
+ BOOST_NOEXCEPT_IF(boost::container::dtl::is_nothrow_move_assignable<value_type>::value)
375
376
  {
376
377
  return static_cast<static_vector&>(base_t::operator=(BOOST_MOVE_BASE(base_t, other)));
377
378
  }
@@ -98,27 +98,25 @@ class basic_string_base
98
98
 
99
99
  basic_string_base()
100
100
  : members_()
101
- { init(); }
101
+ {}
102
102
 
103
103
  explicit basic_string_base(const allocator_type& a)
104
104
  : members_(a)
105
- { init(); }
105
+ {}
106
106
 
107
107
  explicit basic_string_base(BOOST_RV_REF(allocator_type) a)
108
108
  : members_(boost::move(a))
109
- { this->init(); }
109
+ {}
110
110
 
111
111
  basic_string_base(const allocator_type& a, size_type n)
112
112
  : members_(a)
113
113
  {
114
- this->init();
115
114
  this->allocate_initial_block(n);
116
115
  }
117
116
 
118
117
  explicit basic_string_base(size_type n)
119
118
  : members_()
120
119
  {
121
- this->init();
122
120
  this->allocate_initial_block(n);
123
121
  }
124
122
 
@@ -140,6 +138,11 @@ class basic_string_base
140
138
  pointer start;
141
139
 
142
140
  long_t()
141
+ : is_short(0)
142
+ {}
143
+
144
+ long_t(size_type len, size_type stor, pointer ptr)
145
+ : is_short(0), length(len), storage(stor), start(ptr)
143
146
  {}
144
147
 
145
148
  long_t(const long_t &other)
@@ -190,35 +193,49 @@ class basic_string_base
190
193
  value_type data[UnalignedFinalInternalBufferChars];
191
194
  };
192
195
 
193
- union repr_t
196
+ union repr_t_size_t
194
197
  {
195
198
  long_raw_t r;
196
199
  short_t s;
200
+ };
197
201
 
198
- const short_t &short_repr() const
199
- { return s; }
200
-
201
- const long_t &long_repr() const
202
- { return *static_cast<const long_t*>(static_cast<const void*>(r.data)); }
203
-
204
- short_t &short_repr()
205
- { return s; }
206
-
207
- long_t &long_repr()
208
- { return *static_cast<long_t*>(static_cast<void*>(&r)); }
202
+ union repr_t
203
+ {
204
+ long_raw_t r_aligner;
205
+ short_t s_aligner;
206
+ unsigned char data[sizeof(repr_t_size_t)];
209
207
  };
210
208
 
211
209
  struct members_holder
212
210
  : public Allocator
213
211
  {
212
+ void init()
213
+ {
214
+ short_t &s = *::new(this->m_repr.data) short_t;
215
+ s.h.is_short = 1;
216
+ s.h.length = 0;
217
+ }
218
+
214
219
  members_holder()
215
220
  : Allocator()
216
- {}
221
+ { this->init(); }
217
222
 
218
223
  template<class AllocatorConvertible>
219
224
  explicit members_holder(BOOST_FWD_REF(AllocatorConvertible) a)
220
225
  : Allocator(boost::forward<AllocatorConvertible>(a))
221
- {}
226
+ { this->init(); }
227
+
228
+ const short_t *pshort_repr() const
229
+ { return reinterpret_cast<const short_t*>(m_repr.data); }
230
+
231
+ const long_t *plong_repr() const
232
+ { return reinterpret_cast<const long_t*>(m_repr.data); }
233
+
234
+ short_t *pshort_repr()
235
+ { return reinterpret_cast<short_t*>(m_repr.data); }
236
+
237
+ long_t *plong_repr()
238
+ { return reinterpret_cast<long_t*>(m_repr.data); }
222
239
 
223
240
  repr_t m_repr;
224
241
  } members_;
@@ -246,32 +263,51 @@ class basic_string_base
246
263
  return hdr.is_short != 0;
247
264
  }
248
265
 
249
- void is_short(bool yes)
266
+ short_t *construct_short()
250
267
  {
251
- const bool was_short = this->is_short();
252
- if(yes && !was_short){
253
- allocator_traits_type::destroy
254
- ( this->alloc()
255
- , static_cast<long_t*>(static_cast<void*>(&this->members_.m_repr.r))
256
- );
257
- this->members_.m_repr.s.h.is_short = true;
258
- }
259
- else if(!yes && was_short){
260
- allocator_traits_type::construct
261
- ( this->alloc()
262
- , static_cast<long_t*>(static_cast<void*>(&this->members_.m_repr.r))
263
- );
264
- this->members_.m_repr.s.h.is_short = false;
268
+ short_t *ps = ::new(this->members_.m_repr.data) short_t;
269
+ ps->h.is_short = 1;
270
+ return ps;
271
+ }
272
+
273
+ void destroy_short()
274
+ {
275
+ BOOST_ASSERT(this->is_short());
276
+ this->members_.pshort_repr()->~short_t();
277
+ }
278
+
279
+ short_t *assure_short()
280
+ {
281
+ if (!this->is_short()){
282
+ this->destroy_long();
283
+ return construct_short();
265
284
  }
285
+ return this->members_.pshort_repr();
266
286
  }
267
287
 
268
- private:
269
- void init()
288
+ long_t *construct_long()
289
+ {
290
+ long_t *pl = ::new(this->members_.m_repr.data) long_t;
291
+ //is_short flag is written in the constructor
292
+ return pl;
293
+ }
294
+
295
+ void destroy_long()
296
+ {
297
+ BOOST_ASSERT(!this->is_short());
298
+ this->members_.plong_repr()->~long_t();
299
+ }
300
+
301
+ long_t *assure_long()
270
302
  {
271
- this->members_.m_repr.s.h.is_short = 1;
272
- this->members_.m_repr.s.h.length = 0;
303
+ if (this->is_short()){
304
+ this->destroy_short();
305
+ return this->construct_long();
306
+ }
307
+ return this->members_.plong_repr();
273
308
  }
274
309
 
310
+
275
311
  protected:
276
312
 
277
313
  typedef dtl::integral_constant<unsigned,
@@ -334,7 +370,8 @@ class basic_string_base
334
370
  size_type new_cap = this->next_capacity(n);
335
371
  pointer reuse = 0;
336
372
  pointer p = this->allocation_command(allocate_new, n, new_cap, reuse);
337
- this->is_short(false);
373
+ BOOST_ASSERT(this->is_short());
374
+ this->construct_long();
338
375
  this->priv_long_addr(p);
339
376
  this->priv_long_size(0);
340
377
  this->priv_storage(new_cap);
@@ -356,10 +393,16 @@ class basic_string_base
356
393
  { return this->priv_storage() - 1; }
357
394
 
358
395
  pointer priv_short_addr() const
359
- { return pointer_traits::pointer_to(const_cast<value_type&>(this->members_.m_repr.short_repr().data[0])); }
396
+ { return pointer_traits::pointer_to(const_cast<value_type&>(this->members_.pshort_repr()->data[0])); }
397
+
398
+ //GCC seems a bit confused about uninitialized accesses
399
+ #if defined(BOOST_GCC) && (BOOST_GCC >= 40700)
400
+ #pragma GCC diagnostic push
401
+ #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
402
+ #endif
360
403
 
361
404
  pointer priv_long_addr() const
362
- { return this->members_.m_repr.long_repr().start; }
405
+ { return this->members_.plong_repr()->start; }
363
406
 
364
407
  pointer priv_addr() const
365
408
  {
@@ -378,7 +421,7 @@ class basic_string_base
378
421
  }
379
422
 
380
423
  void priv_long_addr(pointer addr)
381
- { this->members_.m_repr.long_repr().start = addr; }
424
+ { this->members_.plong_repr()->start = addr; }
382
425
 
383
426
  size_type priv_storage() const
384
427
  { return this->is_short() ? priv_short_storage() : priv_long_storage(); }
@@ -387,7 +430,7 @@ class basic_string_base
387
430
  { return InternalBufferChars; }
388
431
 
389
432
  size_type priv_long_storage() const
390
- { return this->members_.m_repr.long_repr().storage; }
433
+ { return this->members_.plong_repr()->storage; }
391
434
 
392
435
  void priv_storage(size_type storage)
393
436
  {
@@ -397,17 +440,17 @@ class basic_string_base
397
440
 
398
441
  void priv_long_storage(size_type storage)
399
442
  {
400
- this->members_.m_repr.long_repr().storage = storage;
443
+ this->members_.plong_repr()->storage = storage;
401
444
  }
402
445
 
403
446
  size_type priv_size() const
404
447
  { return this->is_short() ? this->priv_short_size() : this->priv_long_size(); }
405
448
 
406
449
  size_type priv_short_size() const
407
- { return this->members_.m_repr.short_repr().h.length; }
450
+ { return this->members_.pshort_repr()->h.length; }
408
451
 
409
452
  size_type priv_long_size() const
410
- { return this->members_.m_repr.long_repr().length; }
453
+ { return this->members_.plong_repr()->length; }
411
454
 
412
455
  void priv_size(size_type sz)
413
456
  {
@@ -418,14 +461,14 @@ class basic_string_base
418
461
  }
419
462
 
420
463
  void priv_short_size(size_type sz)
421
- {
422
- this->members_.m_repr.s.h.length = (unsigned char)sz;
423
- }
464
+ { this->members_.pshort_repr()->h.length = (unsigned char)sz; }
424
465
 
425
466
  void priv_long_size(size_type sz)
426
- {
427
- this->members_.m_repr.long_repr().length = sz;
428
- }
467
+ { this->members_.plong_repr()->length = sz; }
468
+
469
+ #if defined(BOOST_GCC) && (BOOST_GCC >= 40700)
470
+ #pragma GCC diagnostic pop
471
+ #endif
429
472
 
430
473
  void swap_data(basic_string_base& other)
431
474
  {
@@ -436,23 +479,23 @@ class basic_string_base
436
479
  other.members_.m_repr = tmp;
437
480
  }
438
481
  else{
439
- short_t short_backup(this->members_.m_repr.short_repr());
440
- this->members_.m_repr.short_repr().~short_t();
441
- ::new(&this->members_.m_repr.long_repr()) long_t(other.members_.m_repr.long_repr());
442
- other.members_.m_repr.long_repr().~long_t();
443
- ::new(&other.members_.m_repr.short_repr()) short_t(short_backup);
482
+ short_t short_backup(*this->members_.pshort_repr());
483
+ this->members_.pshort_repr()->~short_t();
484
+ ::new(this->members_.plong_repr()) long_t(*other.members_.plong_repr());
485
+ other.members_.plong_repr()->~long_t();
486
+ ::new(other.members_.pshort_repr()) short_t(short_backup);
444
487
  }
445
488
  }
446
489
  else{
447
490
  if(other.is_short()){
448
- short_t short_backup(other.members_.m_repr.short_repr());
449
- other.members_.m_repr.short_repr().~short_t();
450
- ::new(&other.members_.m_repr.long_repr()) long_t(this->members_.m_repr.long_repr());
451
- this->members_.m_repr.long_repr().~long_t();
452
- ::new(&this->members_.m_repr.short_repr()) short_t(short_backup);
491
+ short_t short_backup(*other.members_.pshort_repr());
492
+ other.members_.pshort_repr()->~short_t();
493
+ ::new(other.members_.plong_repr()) long_t(*this->members_.plong_repr());
494
+ this->members_.plong_repr()->~long_t();
495
+ ::new(this->members_.pshort_repr()) short_t(short_backup);
453
496
  }
454
497
  else{
455
- boost::adl_move_swap(this->members_.m_repr.long_repr(), other.members_.m_repr.long_repr());
498
+ boost::adl_move_swap(*this->members_.plong_repr(), *other.members_.plong_repr());
456
499
  }
457
500
  }
458
501
  }
@@ -830,7 +873,7 @@ class basic_string
830
873
  if(flag && this_alloc != x_alloc){
831
874
  if(!this->is_short()){
832
875
  this->deallocate_block();
833
- this->is_short(true);
876
+ this->assure_short();
834
877
  Traits::assign(*this->priv_addr(), CharT(0));
835
878
  this->priv_short_size(0);
836
879
  }
@@ -853,7 +896,7 @@ class basic_string
853
896
  BOOST_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value
854
897
  || allocator_traits_type::is_always_equal::value)
855
898
  {
856
- //for move constructor, no aliasing (&x != this) is assummed.
899
+ //for move constructor, no aliasing (&x != this) is assumed.
857
900
  BOOST_ASSERT(this != &x);
858
901
  allocator_type &this_alloc = this->alloc();
859
902
  allocator_type &x_alloc = x.alloc();
@@ -1159,7 +1202,9 @@ class basic_string
1159
1202
  Traits::copy( boost::movelib::to_raw_pointer(this->priv_short_addr())
1160
1203
  , boost::movelib::to_raw_pointer(long_addr)
1161
1204
  , long_size+1);
1162
- this->is_short(true);
1205
+ BOOST_ASSERT(!this->is_short());
1206
+ this->destroy_long();
1207
+ this->construct_short();
1163
1208
  this->alloc().deallocate(long_addr, long_storage);
1164
1209
  }
1165
1210
  else{
@@ -1763,7 +1808,7 @@ class basic_string
1763
1808
  this->priv_construct_null(new_start + new_length);
1764
1809
 
1765
1810
  this->deallocate_block();
1766
- this->is_short(false);
1811
+ this->assure_long();
1767
1812
  this->priv_long_addr(new_start);
1768
1813
  this->priv_long_size(new_length);
1769
1814
  this->priv_long_storage(new_cap);
@@ -1782,7 +1827,7 @@ class basic_string
1782
1827
  //Now initialize the new data
1783
1828
  priv_uninitialized_copy(first, last, new_start + before);
1784
1829
  this->priv_construct_null(new_start + (old_size + n));
1785
- this->is_short(false);
1830
+ this->assure_long();
1786
1831
  this->priv_long_addr(new_start);
1787
1832
  this->priv_long_size(old_size + n);
1788
1833
  this->priv_long_storage(new_cap);
@@ -2790,7 +2835,7 @@ class basic_string
2790
2835
  this->priv_construct_null(new_start + new_length);
2791
2836
  }
2792
2837
  this->deallocate_block();
2793
- this->is_short(false);
2838
+ this->assure_long();
2794
2839
  this->priv_long_addr(new_start);
2795
2840
  this->priv_long_size(new_length);
2796
2841
  this->priv_storage(new_cap);
@@ -2933,6 +2978,18 @@ class basic_string
2933
2978
  #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
2934
2979
  };
2935
2980
 
2981
+ #ifndef BOOST_CONTAINER_NO_CXX17_CTAD
2982
+
2983
+ template <typename InputIterator>
2984
+ basic_string(InputIterator, InputIterator) ->
2985
+ basic_string<typename iterator_traits<InputIterator>::value_type>;
2986
+
2987
+ template <typename InputIterator, typename Allocator>
2988
+ basic_string(InputIterator, InputIterator, Allocator const&) ->
2989
+ basic_string<typename iterator_traits<InputIterator>::value_type, Allocator>;
2990
+
2991
+ #endif
2992
+
2936
2993
  #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
2937
2994
 
2938
2995
  //!Typedef for a basic_string of