passenger 4.0.20 → 4.0.21

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

Files changed (496) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.gitignore +1 -0
  5. data/.travis.yml +1 -1
  6. data/NEWS +15 -0
  7. data/README.md +5 -3
  8. data/Rakefile +1 -0
  9. data/bin/passenger-config +1 -5
  10. data/bin/passenger-install-apache2-module +53 -5
  11. data/bin/passenger-install-nginx-module +19 -6
  12. data/bin/passenger-memory-stats +3 -3
  13. data/build/agents.rb +11 -8
  14. data/build/apache2.rb +9 -5
  15. data/build/basics.rb +15 -21
  16. data/build/common_library.rb +16 -6
  17. data/build/cplusplus_support.rb +5 -5
  18. data/build/cxx_tests.rb +3 -3
  19. data/build/documentation.rb +1 -1
  20. data/build/misc.rb +4 -37
  21. data/build/node_tests.rb +29 -0
  22. data/build/oxt_tests.rb +1 -1
  23. data/build/packaging.rb +29 -10
  24. data/build/preprocessor.rb +2 -1
  25. data/build/test_basics.rb +15 -6
  26. data/debian.template/locations.ini.template +1 -0
  27. data/debian.template/passenger.install.template +1 -0
  28. data/dev/copy_boost_headers.rb +7 -3
  29. data/dev/run_travis.sh +32 -16
  30. data/doc/Users guide Apache.idmap.txt +22 -34
  31. data/doc/Users guide Apache.txt +20 -234
  32. data/doc/Users guide Nginx.idmap.txt +84 -66
  33. data/doc/Users guide Nginx.txt +50 -1
  34. data/doc/Users guide Standalone.idmap.txt +74 -0
  35. data/doc/Users guide Standalone.txt +22 -9
  36. data/doc/Users guide.txt +51 -0
  37. data/doc/users_guide_snippets/environment_variables.txt +0 -3
  38. data/doc/users_guide_snippets/installation.txt +337 -380
  39. data/doc/users_guide_snippets/installation/run_installer.txt +58 -0
  40. data/doc/users_guide_snippets/installation/verify_running_epilogue.txt +6 -0
  41. data/doc/users_guide_snippets/support_information.txt +2 -9
  42. data/doc/users_guide_snippets/troubleshooting/default.txt +112 -0
  43. data/doc/users_guide_snippets/troubleshooting/rails.txt +56 -0
  44. data/doc/users_guide_snippets/where_to_get_support.txt +9 -0
  45. data/ext/apache2/Bucket.h +1 -1
  46. data/ext/apache2/Configuration.hpp +0 -44
  47. data/ext/apache2/CreateDirConfig.cpp +1 -1
  48. data/ext/apache2/CreateDirConfig.cpp.erb +1 -1
  49. data/ext/apache2/Hooks.cpp +28 -21
  50. data/ext/apache2/MergeDirConfig.cpp +1 -0
  51. data/ext/apache2/MergeDirConfig.cpp.erb +1 -1
  52. data/ext/apache2/SetHeaders.cpp +73 -0
  53. data/ext/apache2/SetHeaders.cpp.erb +88 -0
  54. data/ext/boost/algorithm/string/detail/find_format.hpp +5 -5
  55. data/ext/boost/algorithm/string/detail/find_format_all.hpp +5 -5
  56. data/ext/boost/algorithm/string/detail/finder.hpp +1 -1
  57. data/ext/boost/algorithm/string/formatter.hpp +2 -2
  58. data/ext/boost/assert.hpp +6 -1
  59. data/ext/boost/atomic.hpp +18 -0
  60. data/ext/boost/atomic/atomic.hpp +241 -0
  61. data/ext/boost/atomic/detail/base.hpp +585 -0
  62. data/ext/boost/atomic/detail/cas32strong.hpp +885 -0
  63. data/ext/boost/atomic/detail/cas32weak.hpp +947 -0
  64. data/ext/boost/atomic/detail/cas64strong.hpp +443 -0
  65. data/ext/boost/atomic/detail/config.hpp +54 -0
  66. data/ext/boost/atomic/detail/gcc-alpha.hpp +368 -0
  67. data/ext/boost/atomic/detail/gcc-armv6plus.hpp +252 -0
  68. data/ext/boost/atomic/detail/gcc-cas.hpp +157 -0
  69. data/ext/boost/atomic/detail/gcc-ppc.hpp +2850 -0
  70. data/ext/boost/atomic/detail/gcc-sparcv9.hpp +1259 -0
  71. data/ext/boost/atomic/detail/gcc-x86.hpp +1766 -0
  72. data/ext/boost/atomic/detail/generic-cas.hpp +206 -0
  73. data/ext/boost/atomic/detail/interlocked.hpp +200 -0
  74. data/ext/boost/atomic/detail/linux-arm.hpp +189 -0
  75. data/ext/boost/atomic/detail/lockpool.hpp +97 -0
  76. data/ext/boost/atomic/detail/platform.hpp +62 -0
  77. data/ext/boost/atomic/detail/type-classification.hpp +45 -0
  78. data/ext/boost/chrono/config.hpp +8 -3
  79. data/ext/boost/chrono/duration.hpp +9 -10
  80. data/ext/boost/chrono/system_clocks.hpp +1 -1
  81. data/ext/boost/chrono/time_point.hpp +4 -3
  82. data/ext/boost/config/auto_link.hpp +53 -52
  83. data/ext/boost/config/compiler/borland.hpp +1 -0
  84. data/ext/boost/config/compiler/clang.hpp +24 -1
  85. data/ext/boost/config/compiler/codegear.hpp +1 -0
  86. data/ext/boost/config/compiler/common_edg.hpp +1 -0
  87. data/ext/boost/config/compiler/cray.hpp +1 -0
  88. data/ext/boost/config/compiler/digitalmars.hpp +1 -0
  89. data/ext/boost/config/compiler/gcc.hpp +29 -3
  90. data/ext/boost/config/compiler/gcc_xml.hpp +2 -1
  91. data/ext/boost/config/compiler/hp_acc.hpp +1 -0
  92. data/ext/boost/config/compiler/intel.hpp +1 -1
  93. data/ext/boost/config/compiler/metrowerks.hpp +1 -0
  94. data/ext/boost/config/compiler/mpw.hpp +1 -0
  95. data/ext/boost/config/compiler/pathscale.hpp +1 -0
  96. data/ext/boost/config/compiler/pgi.hpp +1 -0
  97. data/ext/boost/config/compiler/sunpro_cc.hpp +1 -0
  98. data/ext/boost/config/compiler/vacpp.hpp +3 -2
  99. data/ext/boost/config/compiler/visualc.hpp +25 -11
  100. data/ext/boost/config/platform/vxworks.hpp +353 -15
  101. data/ext/boost/config/select_compiler_config.hpp +4 -4
  102. data/ext/boost/config/stdlib/dinkumware.hpp +10 -3
  103. data/ext/boost/config/stdlib/libstdcpp3.hpp +2 -1
  104. data/ext/boost/config/suffix.hpp +45 -19
  105. data/ext/boost/date_time/format_date_parser.hpp +1 -11
  106. data/ext/boost/date_time/strings_from_facet.hpp +5 -3
  107. data/ext/boost/detail/atomic_redef_macros.hpp +19 -0
  108. data/ext/boost/detail/atomic_undef_macros.hpp +39 -0
  109. data/ext/boost/detail/endian.hpp +52 -4
  110. data/ext/boost/detail/scoped_enum_emulation.hpp +10 -10
  111. data/ext/boost/detail/select_type.hpp +36 -0
  112. data/ext/boost/exception/current_exception_cast.hpp +1 -1
  113. data/ext/boost/exception/detail/error_info_impl.hpp +3 -5
  114. data/ext/boost/exception/detail/exception_ptr.hpp +3 -3
  115. data/ext/boost/exception/detail/is_output_streamable.hpp +1 -1
  116. data/ext/boost/exception/detail/object_hex_dump.hpp +1 -1
  117. data/ext/boost/exception/detail/type_info.hpp +1 -1
  118. data/ext/boost/exception/diagnostic_information.hpp +15 -14
  119. data/ext/boost/exception/exception.hpp +1 -1
  120. data/ext/boost/exception/get_error_info.hpp +1 -1
  121. data/ext/boost/exception/info.hpp +12 -13
  122. data/ext/boost/exception/to_string.hpp +6 -1
  123. data/ext/boost/exception/to_string_stub.hpp +9 -1
  124. data/ext/boost/foreach.hpp +5 -5
  125. data/ext/boost/function/function_template.hpp +6 -6
  126. data/ext/boost/functional/hash/detail/float_functions.hpp +90 -0
  127. data/ext/boost/functional/hash/detail/hash_float.hpp +11 -2
  128. data/ext/boost/functional/hash/extensions.hpp +14 -2
  129. data/ext/boost/functional/hash/hash.hpp +26 -5
  130. data/ext/boost/get_pointer.hpp +17 -2
  131. data/ext/boost/integer_traits.hpp +1 -1
  132. data/ext/boost/lexical_cast.hpp +615 -395
  133. data/ext/boost/libs/atomic/lockpool.cpp +24 -0
  134. data/ext/boost/libs/system/src/error_code.cpp +25 -18
  135. data/ext/boost/libs/thread/src/future.cpp +7 -5
  136. data/ext/boost/libs/thread/src/pthread/once.cpp +9 -3
  137. data/ext/boost/libs/thread/src/pthread/once_atomic.cpp +90 -0
  138. data/ext/boost/libs/thread/src/pthread/thread.cpp +129 -95
  139. data/ext/boost/libs/thread/src/pthread/timeconv.inl +20 -1
  140. data/ext/boost/limits.hpp +1 -1
  141. data/ext/boost/math/policies/policy.hpp +10 -0
  142. data/ext/boost/math/special_functions/detail/round_fwd.hpp +17 -4
  143. data/ext/boost/math/special_functions/fpclassify.hpp +114 -45
  144. data/ext/boost/math/special_functions/math_fwd.hpp +195 -83
  145. data/ext/boost/math/special_functions/sign.hpp +13 -8
  146. data/ext/boost/math/tools/config.hpp +38 -16
  147. data/ext/boost/move/algorithm.hpp +275 -0
  148. data/ext/boost/move/core.hpp +332 -0
  149. data/ext/boost/move/detail/config_begin.hpp +23 -0
  150. data/ext/boost/move/detail/config_end.hpp +20 -0
  151. data/ext/boost/move/detail/meta_utils.hpp +158 -0
  152. data/ext/boost/move/iterator.hpp +298 -0
  153. data/ext/boost/move/move.hpp +10 -1256
  154. data/ext/boost/move/traits.hpp +142 -0
  155. data/ext/boost/move/utility.hpp +194 -0
  156. data/ext/boost/mpl/assert.hpp +72 -4
  157. data/ext/boost/noncopyable.hpp +15 -3
  158. data/ext/boost/pointer_to_other.hpp +55 -0
  159. data/ext/boost/range/concepts.hpp +4 -4
  160. data/ext/boost/range/detail/extract_optional_type.hpp +1 -1
  161. data/ext/boost/range/empty.hpp +1 -1
  162. data/ext/boost/range/iterator_range_core.hpp +4 -1
  163. data/ext/boost/range/iterator_range_io.hpp +2 -2
  164. data/ext/boost/ratio/config.hpp +6 -0
  165. data/ext/boost/ratio/detail/overflow_helpers.hpp +2 -2
  166. data/ext/boost/smart_ptr/allocate_shared_array.hpp +250 -0
  167. data/ext/boost/smart_ptr/detail/allocate_array_helper.hpp +169 -0
  168. data/ext/boost/smart_ptr/detail/array_deleter.hpp +124 -0
  169. data/ext/boost/smart_ptr/detail/array_traits.hpp +53 -0
  170. data/ext/boost/smart_ptr/detail/array_utility.hpp +178 -0
  171. data/ext/boost/smart_ptr/detail/make_array_helper.hpp +157 -0
  172. data/ext/boost/smart_ptr/detail/operator_bool.hpp +16 -9
  173. data/ext/boost/smart_ptr/detail/shared_count.hpp +78 -7
  174. data/ext/boost/smart_ptr/detail/sp_convertible.hpp +15 -0
  175. data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +12 -6
  176. data/ext/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +1 -0
  177. data/ext/boost/smart_ptr/detail/sp_counted_base_aix.hpp +1 -0
  178. data/ext/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +1 -0
  179. data/ext/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +1 -0
  180. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +1 -0
  181. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +1 -0
  182. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +1 -0
  183. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +1 -0
  184. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +1 -0
  185. data/ext/boost/smart_ptr/detail/sp_counted_base_nt.hpp +1 -0
  186. data/ext/boost/smart_ptr/detail/sp_counted_base_pt.hpp +1 -0
  187. data/ext/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +162 -0
  188. data/ext/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +1 -0
  189. data/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp +1 -0
  190. data/ext/boost/smart_ptr/detail/sp_counted_base_sync.hpp +1 -0
  191. data/ext/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +1 -0
  192. data/ext/boost/smart_ptr/detail/sp_counted_impl.hpp +15 -0
  193. data/ext/boost/smart_ptr/detail/sp_forward.hpp +39 -0
  194. data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +19 -3
  195. data/ext/boost/smart_ptr/detail/sp_if_array.hpp +31 -0
  196. data/ext/boost/smart_ptr/detail/sp_nullptr_t.hpp +45 -0
  197. data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +5 -12
  198. data/ext/boost/smart_ptr/enable_shared_from_this.hpp +4 -4
  199. data/ext/boost/smart_ptr/make_shared.hpp +5 -1060
  200. data/ext/boost/smart_ptr/make_shared_array.hpp +247 -0
  201. data/ext/boost/smart_ptr/make_shared_object.hpp +1128 -0
  202. data/ext/boost/smart_ptr/scoped_array.hpp +32 -7
  203. data/ext/boost/smart_ptr/scoped_ptr.hpp +31 -5
  204. data/ext/boost/smart_ptr/shared_array.hpp +135 -20
  205. data/ext/boost/smart_ptr/shared_ptr.hpp +444 -126
  206. data/ext/boost/smart_ptr/weak_ptr.hpp +39 -28
  207. data/ext/boost/static_assert.hpp +74 -17
  208. data/ext/boost/system/error_code.hpp +76 -68
  209. data/ext/boost/system/system_error.hpp +5 -1
  210. data/ext/boost/thread/barrier.hpp +6 -2
  211. data/ext/boost/thread/completion_latch.hpp +233 -0
  212. data/ext/boost/thread/condition.hpp +6 -1
  213. data/ext/boost/thread/detail/async_func.hpp +571 -0
  214. data/ext/boost/thread/detail/config.hpp +248 -40
  215. data/ext/boost/thread/detail/counter.hpp +93 -0
  216. data/ext/boost/thread/detail/delete.hpp +12 -0
  217. data/ext/boost/thread/detail/invoke.hpp +1351 -0
  218. data/ext/boost/thread/detail/is_convertible.hpp +48 -0
  219. data/ext/boost/thread/detail/lockable_wrapper.hpp +45 -0
  220. data/ext/boost/thread/detail/log.hpp +83 -0
  221. data/ext/boost/thread/detail/make_tuple_indices.hpp +224 -0
  222. data/ext/boost/thread/detail/move.hpp +32 -16
  223. data/ext/boost/thread/detail/thread.hpp +236 -41
  224. data/ext/boost/thread/detail/thread_group.hpp +55 -9
  225. data/ext/boost/thread/detail/thread_interruption.hpp +4 -1
  226. data/ext/boost/thread/exceptions.hpp +2 -0
  227. data/ext/boost/thread/externally_locked.hpp +351 -0
  228. data/ext/boost/thread/externally_locked_stream.hpp +170 -0
  229. data/ext/boost/thread/future.hpp +2517 -455
  230. data/ext/boost/thread/future_error_code.hpp +61 -0
  231. data/ext/boost/thread/is_locked_by_this_thread.hpp +39 -0
  232. data/ext/boost/thread/latch.hpp +142 -0
  233. data/ext/boost/thread/lock_algorithms.hpp +468 -0
  234. data/ext/boost/thread/lock_concepts.hpp +197 -0
  235. data/ext/boost/thread/lock_factories.hpp +78 -0
  236. data/ext/boost/thread/lock_guard.hpp +88 -0
  237. data/ext/boost/thread/lock_options.hpp +31 -0
  238. data/ext/boost/thread/lock_traits.hpp +45 -0
  239. data/ext/boost/thread/lock_types.hpp +1226 -0
  240. data/ext/boost/thread/lockable_adapter.hpp +226 -0
  241. data/ext/boost/thread/lockable_concepts.hpp +157 -0
  242. data/ext/boost/thread/lockable_traits.hpp +207 -0
  243. data/ext/boost/thread/locks.hpp +5 -1816
  244. data/ext/boost/thread/mutex.hpp +33 -1
  245. data/ext/boost/thread/null_mutex.hpp +243 -0
  246. data/ext/boost/thread/once.hpp +10 -1
  247. data/ext/boost/thread/poly_lockable.hpp +68 -0
  248. data/ext/boost/thread/poly_lockable_adapter.hpp +89 -0
  249. data/ext/boost/thread/poly_shared_lockable.hpp +135 -0
  250. data/ext/boost/thread/poly_shared_lockable_adapter.hpp +170 -0
  251. data/ext/boost/thread/pthread/condition_variable.hpp +74 -26
  252. data/ext/boost/thread/pthread/condition_variable_fwd.hpp +54 -27
  253. data/ext/boost/thread/pthread/mutex.hpp +101 -38
  254. data/ext/boost/thread/pthread/once.hpp +459 -44
  255. data/ext/boost/thread/pthread/once_atomic.hpp +313 -0
  256. data/ext/boost/thread/pthread/recursive_mutex.hpp +19 -10
  257. data/ext/boost/thread/pthread/shared_mutex.hpp +226 -61
  258. data/ext/boost/thread/pthread/shared_mutex_assert.hpp +724 -0
  259. data/ext/boost/thread/pthread/thread_data.hpp +53 -50
  260. data/ext/boost/thread/pthread/timespec.hpp +96 -12
  261. data/ext/boost/thread/recursive_mutex.hpp +44 -1
  262. data/ext/boost/thread/reverse_lock.hpp +3 -2
  263. data/ext/boost/thread/scoped_thread.hpp +285 -0
  264. data/ext/boost/thread/shared_lock_guard.hpp +2 -1
  265. data/ext/boost/thread/shared_mutex.hpp +23 -0
  266. data/ext/boost/thread/strict_lock.hpp +235 -0
  267. data/ext/boost/thread/sync_bounded_queue.hpp +594 -0
  268. data/ext/boost/thread/sync_queue.hpp +516 -0
  269. data/ext/boost/thread/synchronized_value.hpp +1001 -0
  270. data/ext/boost/thread/testable_mutex.hpp +148 -0
  271. data/ext/boost/thread/thread.hpp +1 -13
  272. data/ext/boost/thread/thread_functors.hpp +57 -0
  273. data/ext/boost/thread/thread_guard.hpp +46 -0
  274. data/ext/boost/thread/thread_only.hpp +29 -0
  275. data/ext/boost/thread/v2/shared_mutex.hpp +1062 -0
  276. data/ext/boost/thread/v2/thread.hpp +37 -10
  277. data/ext/boost/thread/xtime.hpp +2 -1
  278. data/ext/boost/token_functions.hpp +16 -16
  279. data/ext/boost/type_traits/add_lvalue_reference.hpp +26 -0
  280. data/ext/boost/type_traits/add_reference.hpp +1 -1
  281. data/ext/boost/type_traits/add_rvalue_reference.hpp +4 -4
  282. data/ext/boost/type_traits/aligned_storage.hpp +13 -0
  283. data/ext/boost/type_traits/common_type.hpp +11 -12
  284. data/ext/boost/type_traits/config.hpp +1 -1
  285. data/ext/boost/type_traits/detail/common_type_imp.hpp +1 -1
  286. data/ext/boost/type_traits/detail/has_binary_operator.hpp +1 -1
  287. data/ext/boost/type_traits/detail/is_function_ptr_tester.hpp +1 -1
  288. data/ext/boost/type_traits/has_left_shift.hpp +49 -0
  289. data/ext/boost/type_traits/has_right_shift.hpp +49 -0
  290. data/ext/boost/type_traits/has_trivial_move_assign.hpp +57 -0
  291. data/ext/boost/type_traits/has_trivial_move_constructor.hpp +57 -0
  292. data/ext/boost/type_traits/intrinsics.hpp +18 -2
  293. data/ext/boost/type_traits/is_abstract.hpp +1 -1
  294. data/ext/boost/type_traits/is_array.hpp +1 -1
  295. data/ext/boost/type_traits/is_const.hpp +1 -1
  296. data/ext/boost/type_traits/is_convertible.hpp +78 -17
  297. data/ext/boost/type_traits/is_function.hpp +6 -1
  298. data/ext/boost/type_traits/is_integral.hpp +6 -1
  299. data/ext/boost/type_traits/is_nothrow_move_assignable.hpp +84 -0
  300. data/ext/boost/type_traits/is_nothrow_move_constructible.hpp +84 -0
  301. data/ext/boost/type_traits/is_pod.hpp +3 -1
  302. data/ext/boost/type_traits/is_rvalue_reference.hpp +1 -1
  303. data/ext/boost/type_traits/is_volatile.hpp +1 -1
  304. data/ext/boost/type_traits/make_signed.hpp +153 -0
  305. data/ext/boost/type_traits/make_unsigned.hpp +16 -0
  306. data/ext/boost/type_traits/remove_const.hpp +1 -1
  307. data/ext/boost/type_traits/remove_cv.hpp +1 -1
  308. data/ext/boost/type_traits/remove_reference.hpp +1 -1
  309. data/ext/boost/type_traits/remove_volatile.hpp +1 -1
  310. data/ext/boost/unordered/detail/allocate.hpp +1120 -0
  311. data/ext/boost/unordered/detail/buckets.hpp +876 -0
  312. data/ext/boost/unordered/detail/equivalent.hpp +680 -0
  313. data/ext/boost/unordered/detail/extract_key.hpp +183 -0
  314. data/ext/boost/unordered/detail/fwd.hpp +23 -0
  315. data/ext/boost/unordered/detail/table.hpp +861 -0
  316. data/ext/boost/unordered/detail/unique.hpp +622 -0
  317. data/ext/boost/unordered/detail/util.hpp +260 -0
  318. data/ext/boost/unordered/unordered_map.hpp +1652 -0
  319. data/ext/boost/unordered/unordered_map_fwd.hpp +65 -0
  320. data/ext/boost/unordered/unordered_set.hpp +1549 -0
  321. data/ext/boost/unordered/unordered_set_fwd.hpp +63 -0
  322. data/ext/boost/unordered_map.hpp +18 -0
  323. data/ext/boost/unordered_set.hpp +18 -0
  324. data/ext/boost/utility/addressof.hpp +2 -2
  325. data/ext/boost/utility/result_of.hpp +8 -1
  326. data/ext/boost/version.hpp +2 -2
  327. data/ext/common/Account.h +1 -1
  328. data/ext/common/AccountsDatabase.h +1 -1
  329. data/ext/common/AgentsStarter.cpp +3 -1
  330. data/ext/common/AgentsStarter.h +2 -2
  331. data/ext/common/ApplicationPool2/AppTypes.cpp +24 -6
  332. data/ext/common/ApplicationPool2/AppTypes.h +17 -8
  333. data/ext/common/ApplicationPool2/Common.h +12 -12
  334. data/ext/common/ApplicationPool2/DirectSpawner.h +2 -2
  335. data/ext/common/ApplicationPool2/DummySpawner.h +3 -3
  336. data/ext/common/ApplicationPool2/Group.h +6 -6
  337. data/ext/common/ApplicationPool2/Implementation.cpp +19 -19
  338. data/ext/common/ApplicationPool2/PipeWatcher.h +5 -5
  339. data/ext/common/ApplicationPool2/Pool.h +21 -21
  340. data/ext/common/ApplicationPool2/Process.h +6 -6
  341. data/ext/common/ApplicationPool2/Session.h +1 -1
  342. data/ext/common/ApplicationPool2/SmartSpawner.h +24 -12
  343. data/ext/common/ApplicationPool2/Socket.h +2 -2
  344. data/ext/common/ApplicationPool2/Spawner.h +64 -14
  345. data/ext/common/ApplicationPool2/SpawnerFactory.h +7 -7
  346. data/ext/common/ApplicationPool2/SuperGroup.h +5 -5
  347. data/ext/common/BackgroundEventLoop.cpp +4 -4
  348. data/ext/common/BackgroundEventLoop.h +1 -1
  349. data/ext/common/Constants.h +13 -1
  350. data/ext/common/EventedBufferedInput.h +8 -8
  351. data/ext/common/Exceptions.cpp +71 -0
  352. data/ext/common/Exceptions.h +60 -7
  353. data/ext/common/FileDescriptor.h +4 -4
  354. data/ext/common/MessageClient.h +1 -1
  355. data/ext/common/MessageServer.h +5 -5
  356. data/ext/common/MultiLibeio.cpp +3 -3
  357. data/ext/common/MultiLibeio.h +2 -2
  358. data/ext/common/RandomGenerator.h +11 -11
  359. data/ext/common/ResourceLocator.h +8 -1
  360. data/ext/common/SafeLibev.h +12 -12
  361. data/ext/common/ServerInstanceDir.h +11 -3
  362. data/ext/common/UnionStation.h +10 -10
  363. data/ext/common/Utils.cpp +11 -13
  364. data/ext/common/Utils.h +9 -9
  365. data/ext/common/Utils/BlockingQueue.h +10 -10
  366. data/ext/common/Utils/BufferedIO.h +1 -1
  367. data/ext/common/Utils/CachedFileStat.hpp +2 -2
  368. data/ext/common/Utils/FileChangeChecker.h +1 -1
  369. data/ext/common/Utils/HashMap.h +13 -4
  370. data/ext/common/Utils/IOUtils.cpp +33 -10
  371. data/ext/common/Utils/IniFile.h +3 -3
  372. data/ext/common/Utils/Lock.h +2 -2
  373. data/ext/common/Utils/MessagePassing.h +10 -10
  374. data/ext/common/Utils/ProcessMetricsCollector.h +24 -6
  375. data/ext/common/Utils/ScopeGuard.h +5 -5
  376. data/ext/common/Utils/jsoncpp.cpp +2 -0
  377. data/ext/common/agents/HelperAgent/FileBackedPipe.h +26 -26
  378. data/ext/common/agents/HelperAgent/Main.cpp +18 -18
  379. data/ext/common/agents/HelperAgent/RequestHandler.cpp +4 -4
  380. data/ext/common/agents/HelperAgent/RequestHandler.h +30 -21
  381. data/ext/common/agents/LoggingAgent/AdminController.h +1 -1
  382. data/ext/common/agents/LoggingAgent/FilterSupport.h +13 -11
  383. data/ext/common/agents/LoggingAgent/LoggingServer.h +11 -11
  384. data/ext/common/agents/LoggingAgent/Main.cpp +9 -9
  385. data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
  386. data/ext/common/agents/SpawnPreparer.cpp +1 -0
  387. data/ext/common/agents/Watchdog/AgentWatcher.cpp +8 -7
  388. data/ext/common/agents/Watchdog/Main.cpp +81 -73
  389. data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +1 -1
  390. data/ext/libev/Changes +57 -0
  391. data/ext/libev/LICENSE +2 -1
  392. data/ext/libev/Makefile.in +110 -50
  393. data/ext/libev/README +8 -8
  394. data/ext/libev/aclocal.m4 +1503 -861
  395. data/ext/libev/config.guess +290 -304
  396. data/ext/libev/config.sub +77 -198
  397. data/ext/libev/configure +1735 -890
  398. data/ext/libev/configure.ac +3 -2
  399. data/ext/libev/ev++.h +6 -6
  400. data/ext/libev/ev.c +541 -214
  401. data/ext/libev/ev.h +106 -100
  402. data/ext/libev/ev_epoll.c +1 -1
  403. data/ext/libev/ev_kqueue.c +20 -4
  404. data/ext/libev/ev_vars.h +15 -16
  405. data/ext/libev/ev_win32.c +12 -2
  406. data/ext/libev/ev_wrap.h +162 -160
  407. data/ext/libev/event.c +29 -6
  408. data/ext/libev/event.h +9 -2
  409. data/ext/libev/ltmain.sh +2632 -1384
  410. data/ext/nginx/ConfigurationCommands.c +1 -1
  411. data/ext/nginx/ConfigurationCommands.c.erb +3 -1
  412. data/ext/nginx/ContentHandler.c +25 -2
  413. data/ext/nginx/CreateLocationConfig.c +1 -0
  414. data/ext/nginx/CreateLocationConfig.c.erb +1 -1
  415. data/ext/nginx/MergeLocationConfig.c +1 -0
  416. data/ext/nginx/MergeLocationConfig.c.erb +1 -1
  417. data/ext/nginx/config +12 -0
  418. data/ext/oxt/dynamic_thread_group.hpp +7 -4
  419. data/ext/oxt/system_calls.cpp +5 -1
  420. data/ext/oxt/system_calls.hpp +3 -0
  421. data/helper-scripts/node-loader.js +117 -249
  422. data/lib/phusion_passenger.rb +27 -5
  423. data/lib/phusion_passenger/abstract_installer.rb +104 -9
  424. data/lib/phusion_passenger/admin_tools/memory_stats.rb +10 -9
  425. data/lib/phusion_passenger/apache2/config_options.rb +6 -3
  426. data/lib/phusion_passenger/common_library.rb +7 -1
  427. data/lib/phusion_passenger/constants.rb +6 -0
  428. data/lib/phusion_passenger/loader_shared_helpers.rb +7 -4
  429. data/lib/phusion_passenger/nginx/config_options.rb +2 -1
  430. data/lib/phusion_passenger/packaging.rb +3 -0
  431. data/lib/phusion_passenger/platform_info/apache.rb +43 -6
  432. data/lib/phusion_passenger/platform_info/apache_detector.rb +15 -5
  433. data/lib/phusion_passenger/platform_info/compiler.rb +167 -32
  434. data/lib/phusion_passenger/platform_info/cxx_portability.rb +133 -77
  435. data/lib/phusion_passenger/platform_info/depcheck.rb +17 -7
  436. data/lib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +3 -3
  437. data/lib/phusion_passenger/platform_info/depcheck_specs/compiler_toolchain.rb +4 -4
  438. data/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +5 -6
  439. data/lib/phusion_passenger/platform_info/linux.rb +2 -1
  440. data/lib/phusion_passenger/platform_info/operating_system.rb +1 -1
  441. data/lib/phusion_passenger/platform_info/ruby.rb +18 -3
  442. data/lib/phusion_passenger/standalone/runtime_installer.rb +6 -2
  443. data/lib/phusion_passenger/standalone/start_command.rb +8 -2
  444. data/lib/phusion_passenger/utils/ansi_colors.rb +9 -0
  445. data/lib/phusion_passenger/utils/hosts_file_parser.rb +4 -2
  446. data/node_lib/phusion_passenger/httplib_emulation.js +141 -0
  447. data/node_lib/phusion_passenger/line_reader.js +154 -0
  448. data/node_lib/phusion_passenger/request_handler.js +65 -0
  449. data/node_lib/phusion_passenger/session_protocol_parser.js +113 -0
  450. data/resources/templates/apache2/deployment_example.txt.erb +2 -1
  451. data/resources/templates/apache2/installing_against_a_different_apache.txt.erb +14 -0
  452. data/resources/templates/apache2/multiple_apache_installations_detected.txt.erb +15 -0
  453. data/resources/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
  454. data/resources/templates/general_error_with_html.html.template +1 -1
  455. data/resources/templates/installer_common/gem_install_permission_problems.txt.erb +17 -0
  456. data/resources/templates/installer_common/low_amount_of_memory_warning.txt.erb +6 -4
  457. data/resources/templates/installer_common/world_inaccessible_directories.txt.erb +16 -0
  458. data/resources/templates/nginx/deployment_example.txt.erb +2 -1
  459. data/resources/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
  460. data/resources/templates/standalone/config.erb +1 -0
  461. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +3 -3
  462. data/test/cxx/ApplicationPool2/PoolTest.cpp +4 -4
  463. data/test/cxx/ApplicationPool2/ProcessTest.cpp +5 -5
  464. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +5 -5
  465. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +1 -1
  466. data/test/cxx/EventedBufferedInputTest.cpp +6 -6
  467. data/test/cxx/FileBackedPipeTest.cpp +1 -1
  468. data/test/cxx/MessagePassingTest.cpp +1 -1
  469. data/test/cxx/MessageServerTest.cpp +4 -4
  470. data/test/cxx/RequestHandlerTest.cpp +7 -7
  471. data/test/cxx/UnionStationTest.cpp +2 -2
  472. data/test/node/line_reader_spec.js +338 -0
  473. data/test/node/spec_helper.js +27 -0
  474. data/test/ruby/standalone/runtime_installer_spec.rb +2 -1
  475. metadata +131 -22
  476. metadata.gz.asc +7 -7
  477. data/ext/boost/functional/hash/detail/container_fwd_0x.hpp +0 -29
  478. data/ext/boost/lambda/core.hpp +0 -79
  479. data/ext/boost/lambda/detail/actions.hpp +0 -174
  480. data/ext/boost/lambda/detail/arity_code.hpp +0 -110
  481. data/ext/boost/lambda/detail/function_adaptors.hpp +0 -789
  482. data/ext/boost/lambda/detail/is_instance_of.hpp +0 -104
  483. data/ext/boost/lambda/detail/lambda_config.hpp +0 -48
  484. data/ext/boost/lambda/detail/lambda_functor_base.hpp +0 -615
  485. data/ext/boost/lambda/detail/lambda_functors.hpp +0 -324
  486. data/ext/boost/lambda/detail/lambda_fwd.hpp +0 -74
  487. data/ext/boost/lambda/detail/lambda_traits.hpp +0 -578
  488. data/ext/boost/lambda/detail/member_ptr.hpp +0 -737
  489. data/ext/boost/lambda/detail/operator_actions.hpp +0 -139
  490. data/ext/boost/lambda/detail/operator_lambda_func_base.hpp +0 -271
  491. data/ext/boost/lambda/detail/operator_return_type_traits.hpp +0 -917
  492. data/ext/boost/lambda/detail/operators.hpp +0 -370
  493. data/ext/boost/lambda/detail/ret.hpp +0 -325
  494. data/ext/boost/lambda/detail/return_type_traits.hpp +0 -282
  495. data/ext/boost/lambda/detail/select_functions.hpp +0 -74
  496. data/ext/boost/lambda/lambda.hpp +0 -34
@@ -62,6 +62,7 @@ public:
62
62
  }
63
63
 
64
64
  virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
65
+ virtual void * get_untyped_deleter() = 0;
65
66
 
66
67
  void add_ref_copy()
67
68
  {
@@ -84,6 +84,7 @@ public:
84
84
  }
85
85
 
86
86
  virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
87
+ virtual void * get_untyped_deleter() = 0;
87
88
 
88
89
  void add_ref_copy()
89
90
  {
@@ -109,6 +109,7 @@ public:
109
109
  }
110
110
 
111
111
  virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
112
+ virtual void * get_untyped_deleter() = 0;
112
113
 
113
114
  void add_ref_copy()
114
115
  {
@@ -104,6 +104,7 @@ public:
104
104
  }
105
105
 
106
106
  virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
107
+ virtual void * get_untyped_deleter() = 0;
107
108
 
108
109
  void add_ref_copy()
109
110
  {
@@ -83,6 +83,11 @@ public:
83
83
  return 0;
84
84
  }
85
85
 
86
+ virtual void * get_untyped_deleter()
87
+ {
88
+ return 0;
89
+ }
90
+
86
91
  #if defined(BOOST_SP_USE_STD_ALLOCATOR)
87
92
 
88
93
  void * operator new( std::size_t )
@@ -153,6 +158,11 @@ public:
153
158
  return ti == BOOST_SP_TYPEID(D)? &reinterpret_cast<char&>( del ): 0;
154
159
  }
155
160
 
161
+ virtual void * get_untyped_deleter()
162
+ {
163
+ return &reinterpret_cast<char&>( del );
164
+ }
165
+
156
166
  #if defined(BOOST_SP_USE_STD_ALLOCATOR)
157
167
 
158
168
  void * operator new( std::size_t )
@@ -226,6 +236,11 @@ public:
226
236
  {
227
237
  return ti == BOOST_SP_TYPEID( D )? &reinterpret_cast<char&>( d_ ): 0;
228
238
  }
239
+
240
+ virtual void * get_untyped_deleter()
241
+ {
242
+ return &reinterpret_cast<char&>( d_ );
243
+ }
229
244
  };
230
245
 
231
246
  #ifdef __CODEGUARD__
@@ -0,0 +1,39 @@
1
+ #ifndef BOOST_SMART_PTR_DETAIL_SP_FORWARD_HPP_INCLUDED
2
+ #define BOOST_SMART_PTR_DETAIL_SP_FORWARD_HPP_INCLUDED
3
+
4
+ // MS compatible compilers support #pragma once
5
+
6
+ #if defined(_MSC_VER) && (_MSC_VER >= 1020)
7
+ # pragma once
8
+ #endif
9
+
10
+ // detail/sp_forward.hpp
11
+ //
12
+ // Copyright 2008,2012 Peter Dimov
13
+ //
14
+ // Distributed under the Boost Software License, Version 1.0.
15
+ // See accompanying file LICENSE_1_0.txt or copy at
16
+ // http://www.boost.org/LICENSE_1_0.txt
17
+
18
+ #include <boost/config.hpp>
19
+
20
+ namespace boost
21
+ {
22
+
23
+ namespace detail
24
+ {
25
+
26
+ #if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
27
+
28
+ template< class T > T&& sp_forward( T & t ) BOOST_NOEXCEPT
29
+ {
30
+ return static_cast< T&& >( t );
31
+ }
32
+
33
+ #endif
34
+
35
+ } // namespace detail
36
+
37
+ } // namespace boost
38
+
39
+ #endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_FORWARD_HPP_INCLUDED
@@ -20,7 +20,17 @@
20
20
  // are available.
21
21
  //
22
22
 
23
- #if defined( __GNUC__ ) && ( __GNUC__ * 100 + __GNUC_MINOR__ >= 401 ) && !defined( BOOST_SP_NO_SYNC )
23
+ #ifndef BOOST_SP_NO_SYNC
24
+
25
+ #if defined( __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 )
26
+
27
+ # define BOOST_SP_HAS_SYNC
28
+
29
+ #elif defined( __IBMCPP__ ) && ( __IBMCPP__ >= 1210 )
30
+
31
+ # define BOOST_SP_HAS_SYNC
32
+
33
+ #elif defined( __GNUC__ ) && ( __GNUC__ * 100 + __GNUC_MINOR__ >= 401 )
24
34
 
25
35
  #define BOOST_SP_HAS_SYNC
26
36
 
@@ -44,10 +54,16 @@
44
54
  #undef BOOST_SP_HAS_SYNC
45
55
  #endif
46
56
 
47
- #if defined( __INTEL_COMPILER ) && !defined( __ia64__ ) && ( __INTEL_COMPILER < 1100 )
57
+ #if defined( __INTEL_COMPILER ) && !defined( __ia64__ ) && ( __INTEL_COMPILER < 1110 )
48
58
  #undef BOOST_SP_HAS_SYNC
49
59
  #endif
50
60
 
51
- #endif // __GNUC__ * 100 + __GNUC_MINOR__ >= 401
61
+ #if defined(__PATHSCALE__) && ((__PATHCC__ == 4) && (__PATHCC_MINOR__ < 9))
62
+ #undef BOOST_SP_HAS_SYNC
63
+ #endif
64
+
65
+ #endif
66
+
67
+ #endif // #ifndef BOOST_SP_NO_SYNC
52
68
 
53
69
  #endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_HAS_SYNC_HPP_INCLUDED
@@ -0,0 +1,31 @@
1
+ /*
2
+ * Copyright (c) 2012 Glen Joseph Fernandes
3
+ * glenfe at live dot com
4
+ *
5
+ * Distributed under the Boost Software License,
6
+ * Version 1.0. (See accompanying file LICENSE_1_0.txt
7
+ * or copy at http://boost.org/LICENSE_1_0.txt)
8
+ */
9
+ #ifndef BOOST_SMART_PTR_DETAIL_SP_IF_ARRAY_HPP
10
+ #define BOOST_SMART_PTR_DETAIL_SP_IF_ARRAY_HPP
11
+
12
+ #include <boost/smart_ptr/shared_ptr.hpp>
13
+
14
+ namespace boost {
15
+ namespace detail {
16
+ template<typename T>
17
+ struct sp_if_array;
18
+ template<typename T>
19
+ struct sp_if_array<T[]> {
20
+ typedef boost::shared_ptr<T[]> type;
21
+ };
22
+ template<typename T>
23
+ struct sp_if_size_array;
24
+ template<typename T, std::size_t N>
25
+ struct sp_if_size_array<T[N]> {
26
+ typedef boost::shared_ptr<T[N]> type;
27
+ };
28
+ }
29
+ }
30
+
31
+ #endif
@@ -0,0 +1,45 @@
1
+ #ifndef BOOST_SMART_PTR_DETAIL_SP_NULLPTR_T_HPP_INCLUDED
2
+ #define BOOST_SMART_PTR_DETAIL_SP_NULLPTR_T_HPP_INCLUDED
3
+
4
+ // MS compatible compilers support #pragma once
5
+
6
+ #if defined(_MSC_VER) && (_MSC_VER >= 1020)
7
+ # pragma once
8
+ #endif
9
+
10
+ // detail/sp_nullptr_t.hpp
11
+ //
12
+ // Copyright 2013 Peter Dimov
13
+ //
14
+ // Distributed under the Boost Software License, Version 1.0.
15
+ // See accompanying file LICENSE_1_0.txt or copy at
16
+ // http://www.boost.org/LICENSE_1_0.txt
17
+
18
+ #include <boost/config.hpp>
19
+ #include <cstddef>
20
+
21
+ #if !defined( BOOST_NO_CXX11_NULLPTR )
22
+
23
+ namespace boost
24
+ {
25
+
26
+ namespace detail
27
+ {
28
+
29
+ #if defined( __clang__ ) && !defined( _LIBCPP_VERSION ) && !defined( BOOST_NO_CXX11_DECLTYPE )
30
+
31
+ typedef decltype(nullptr) sp_nullptr_t;
32
+
33
+ #else
34
+
35
+ typedef std::nullptr_t sp_nullptr_t;
36
+
37
+ #endif
38
+
39
+ } // namespace detail
40
+
41
+ } // namespace boost
42
+
43
+ #endif // !defined( BOOST_NO_CXX11_NULLPTR )
44
+
45
+ #endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_NULLPTR_T_HPP_INCLUDED
@@ -11,13 +11,15 @@
11
11
 
12
12
  #include <boost/smart_ptr/detail/yield_k.hpp>
13
13
 
14
- #if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__)
14
+ #if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7S__)
15
15
 
16
16
  # define BOOST_SP_ARM_BARRIER "dmb"
17
+ # define BOOST_SP_ARM_HAS_LDREX
17
18
 
18
19
  #elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__)
19
20
 
20
21
  # define BOOST_SP_ARM_BARRIER "mcr p15, 0, r0, c7, c10, 5"
22
+ # define BOOST_SP_ARM_HAS_LDREX
21
23
 
22
24
  #else
23
25
 
@@ -43,17 +45,7 @@ public:
43
45
  {
44
46
  int r;
45
47
 
46
- #if defined(__ARM_ARCH_6__) \
47
- || defined(__ARM_ARCH_6J__) \
48
- || defined(__ARM_ARCH_6K__) \
49
- || defined(__ARM_ARCH_6Z__) \
50
- || defined(__ARM_ARCH_6ZK__) \
51
- || defined(__ARM_ARCH_6T2__) \
52
- || defined(__ARM_ARCH_7__) \
53
- || defined(__ARM_ARCH_7A__) \
54
- || defined(__ARM_ARCH_7R__) \
55
- || defined(__ARM_ARCH_7M__) \
56
- || defined(__ARM_ARCH_7EM__)
48
+ #ifdef BOOST_SP_ARM_HAS_LDREX
57
49
 
58
50
  __asm__ __volatile__(
59
51
  "ldrex %0, [%2]; \n"
@@ -123,5 +115,6 @@ public:
123
115
  #define BOOST_DETAIL_SPINLOCK_INIT {0}
124
116
 
125
117
  #undef BOOST_SP_ARM_BARRIER
118
+ #undef BOOST_SP_ARM_HAS_LDREX
126
119
 
127
120
  #endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED
@@ -25,20 +25,20 @@ template<class T> class enable_shared_from_this
25
25
  {
26
26
  protected:
27
27
 
28
- enable_shared_from_this()
28
+ enable_shared_from_this() BOOST_NOEXCEPT
29
29
  {
30
30
  }
31
31
 
32
- enable_shared_from_this(enable_shared_from_this const &)
32
+ enable_shared_from_this(enable_shared_from_this const &) BOOST_NOEXCEPT
33
33
  {
34
34
  }
35
35
 
36
- enable_shared_from_this & operator=(enable_shared_from_this const &)
36
+ enable_shared_from_this & operator=(enable_shared_from_this const &) BOOST_NOEXCEPT
37
37
  {
38
38
  return *this;
39
39
  }
40
40
 
41
- ~enable_shared_from_this()
41
+ ~enable_shared_from_this() BOOST_NOEXCEPT // ~weak_ptr<T> newer throws, so this call also must not throw
42
42
  {
43
43
  }
44
44
 
@@ -3,7 +3,7 @@
3
3
 
4
4
  // make_shared.hpp
5
5
  //
6
- // Copyright (c) 2007, 2008 Peter Dimov
6
+ // Copyright (c) 2007, 2008, 2012 Peter Dimov
7
7
  //
8
8
  // Distributed under the Boost Software License, Version 1.0.
9
9
  // See accompanying file LICENSE_1_0.txt or copy at
@@ -12,1066 +12,11 @@
12
12
  // See http://www.boost.org/libs/smart_ptr/make_shared.html
13
13
  // for documentation.
14
14
 
15
- #include <boost/config.hpp>
16
- #include <boost/smart_ptr/shared_ptr.hpp>
17
- #include <boost/type_traits/type_with_alignment.hpp>
18
- #include <boost/type_traits/alignment_of.hpp>
19
- #include <cstddef>
20
- #include <new>
21
-
22
- namespace boost
23
- {
24
-
25
- namespace detail
26
- {
27
-
28
- template< std::size_t N, std::size_t A > struct sp_aligned_storage
29
- {
30
- union type
31
- {
32
- char data_[ N ];
33
- typename boost::type_with_alignment< A >::type align_;
34
- };
35
- };
36
-
37
- template< class T > class sp_ms_deleter
38
- {
39
- private:
40
-
41
- typedef typename sp_aligned_storage< sizeof( T ), ::boost::alignment_of< T >::value >::type storage_type;
42
-
43
- bool initialized_;
44
- storage_type storage_;
45
-
46
- private:
47
-
48
- void destroy()
49
- {
50
- if( initialized_ )
51
- {
52
- #if defined( __GNUC__ )
53
-
54
- // fixes incorrect aliasing warning
55
- T * p = reinterpret_cast< T* >( storage_.data_ );
56
- p->~T();
57
-
58
- #else
59
-
60
- reinterpret_cast< T* >( storage_.data_ )->~T();
61
-
62
- #endif
63
-
64
- initialized_ = false;
65
- }
66
- }
67
-
68
- public:
69
-
70
- sp_ms_deleter(): initialized_( false )
71
- {
72
- }
73
-
74
- // optimization: do not copy storage_
75
- sp_ms_deleter( sp_ms_deleter const & ): initialized_( false )
76
- {
77
- }
78
-
79
- ~sp_ms_deleter()
80
- {
81
- destroy();
82
- }
83
-
84
- void operator()( T * )
85
- {
86
- destroy();
87
- }
88
-
89
- void * address()
90
- {
91
- return storage_.data_;
92
- }
93
-
94
- void set_initialized()
95
- {
96
- initialized_ = true;
97
- }
98
- };
99
-
100
- #if defined( BOOST_HAS_RVALUE_REFS )
101
-
102
- template< class T > T&& sp_forward( T & t )
103
- {
104
- return static_cast< T&& >( t );
105
- }
106
-
107
- #endif
108
-
109
- } // namespace detail
110
-
111
- #if !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING )
112
- # define BOOST_SP_MSD( T ) boost::detail::sp_inplace_tag< boost::detail::sp_ms_deleter< T > >()
113
- #else
114
- # define BOOST_SP_MSD( T ) boost::detail::sp_ms_deleter< T >()
115
- #endif
116
-
117
- // Zero-argument versions
118
- //
119
- // Used even when variadic templates are available because of the new T() vs new T issue
120
-
121
- template< class T > boost::shared_ptr< T > make_shared()
122
- {
123
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
124
-
125
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
126
-
127
- void * pv = pd->address();
128
-
129
- ::new( pv ) T();
130
- pd->set_initialized();
131
-
132
- T * pt2 = static_cast< T* >( pv );
133
-
134
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
135
- return boost::shared_ptr< T >( pt, pt2 );
136
- }
137
-
138
- template< class T, class A > boost::shared_ptr< T > allocate_shared( A const & a )
139
- {
140
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
141
-
142
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
143
-
144
- void * pv = pd->address();
145
-
146
- ::new( pv ) T();
147
- pd->set_initialized();
148
-
149
- T * pt2 = static_cast< T* >( pv );
150
-
151
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
152
- return boost::shared_ptr< T >( pt, pt2 );
153
- }
154
-
155
- #if defined( BOOST_HAS_VARIADIC_TMPL ) && defined( BOOST_HAS_RVALUE_REFS )
156
-
157
- // Variadic templates, rvalue reference
158
-
159
- template< class T, class Arg1, class... Args > boost::shared_ptr< T > make_shared( Arg1 && arg1, Args && ... args )
160
- {
161
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
162
-
163
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
164
-
165
- void * pv = pd->address();
166
-
167
- ::new( pv ) T( boost::detail::sp_forward<Arg1>( arg1 ), boost::detail::sp_forward<Args>( args )... );
168
- pd->set_initialized();
169
-
170
- T * pt2 = static_cast< T* >( pv );
171
-
172
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
173
- return boost::shared_ptr< T >( pt, pt2 );
174
- }
175
-
176
- template< class T, class A, class Arg1, class... Args > boost::shared_ptr< T > allocate_shared( A const & a, Arg1 && arg1, Args && ... args )
177
- {
178
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
179
-
180
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
181
-
182
- void * pv = pd->address();
183
-
184
- ::new( pv ) T( boost::detail::sp_forward<Arg1>( arg1 ), boost::detail::sp_forward<Args>( args )... );
185
- pd->set_initialized();
186
-
187
- T * pt2 = static_cast< T* >( pv );
188
-
189
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
190
- return boost::shared_ptr< T >( pt, pt2 );
191
- }
192
-
193
- #elif defined( BOOST_HAS_RVALUE_REFS )
194
-
195
- // For example MSVC 10.0
196
-
197
- template< class T, class A1 >
198
- boost::shared_ptr< T > make_shared( A1 && a1 )
199
- {
200
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
201
-
202
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
203
-
204
- void * pv = pd->address();
205
-
206
- ::new( pv ) T(
207
- boost::detail::sp_forward<A1>( a1 )
208
- );
209
-
210
- pd->set_initialized();
211
-
212
- T * pt2 = static_cast< T* >( pv );
213
-
214
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
215
- return boost::shared_ptr< T >( pt, pt2 );
216
- }
217
-
218
- template< class T, class A, class A1 >
219
- boost::shared_ptr< T > allocate_shared( A const & a, A1 && a1 )
220
- {
221
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
222
-
223
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
224
-
225
- void * pv = pd->address();
226
-
227
- ::new( pv ) T(
228
- boost::detail::sp_forward<A1>( a1 )
229
- );
230
-
231
- pd->set_initialized();
232
-
233
- T * pt2 = static_cast< T* >( pv );
234
-
235
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
236
- return boost::shared_ptr< T >( pt, pt2 );
237
- }
238
-
239
- template< class T, class A1, class A2 >
240
- boost::shared_ptr< T > make_shared( A1 && a1, A2 && a2 )
241
- {
242
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
243
-
244
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
245
-
246
- void * pv = pd->address();
247
-
248
- ::new( pv ) T(
249
- boost::detail::sp_forward<A1>( a1 ),
250
- boost::detail::sp_forward<A2>( a2 )
251
- );
252
-
253
- pd->set_initialized();
254
-
255
- T * pt2 = static_cast< T* >( pv );
256
-
257
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
258
- return boost::shared_ptr< T >( pt, pt2 );
259
- }
260
-
261
- template< class T, class A, class A1, class A2 >
262
- boost::shared_ptr< T > allocate_shared( A const & a, A1 && a1, A2 && a2 )
263
- {
264
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
265
-
266
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
267
-
268
- void * pv = pd->address();
269
-
270
- ::new( pv ) T(
271
- boost::detail::sp_forward<A1>( a1 ),
272
- boost::detail::sp_forward<A2>( a2 )
273
- );
274
-
275
- pd->set_initialized();
276
-
277
- T * pt2 = static_cast< T* >( pv );
278
-
279
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
280
- return boost::shared_ptr< T >( pt, pt2 );
281
- }
282
-
283
- template< class T, class A1, class A2, class A3 >
284
- boost::shared_ptr< T > make_shared( A1 && a1, A2 && a2, A3 && a3 )
285
- {
286
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
287
-
288
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
289
-
290
- void * pv = pd->address();
291
-
292
- ::new( pv ) T(
293
- boost::detail::sp_forward<A1>( a1 ),
294
- boost::detail::sp_forward<A2>( a2 ),
295
- boost::detail::sp_forward<A3>( a3 )
296
- );
297
-
298
- pd->set_initialized();
299
-
300
- T * pt2 = static_cast< T* >( pv );
301
-
302
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
303
- return boost::shared_ptr< T >( pt, pt2 );
304
- }
305
-
306
- template< class T, class A, class A1, class A2, class A3 >
307
- boost::shared_ptr< T > allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3 )
308
- {
309
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
310
-
311
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
312
-
313
- void * pv = pd->address();
314
-
315
- ::new( pv ) T(
316
- boost::detail::sp_forward<A1>( a1 ),
317
- boost::detail::sp_forward<A2>( a2 ),
318
- boost::detail::sp_forward<A3>( a3 )
319
- );
320
-
321
- pd->set_initialized();
322
-
323
- T * pt2 = static_cast< T* >( pv );
324
-
325
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
326
- return boost::shared_ptr< T >( pt, pt2 );
327
- }
328
-
329
- template< class T, class A1, class A2, class A3, class A4 >
330
- boost::shared_ptr< T > make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4 )
331
- {
332
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
333
-
334
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
335
-
336
- void * pv = pd->address();
337
-
338
- ::new( pv ) T(
339
- boost::detail::sp_forward<A1>( a1 ),
340
- boost::detail::sp_forward<A2>( a2 ),
341
- boost::detail::sp_forward<A3>( a3 ),
342
- boost::detail::sp_forward<A4>( a4 )
343
- );
344
-
345
- pd->set_initialized();
346
-
347
- T * pt2 = static_cast< T* >( pv );
348
-
349
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
350
- return boost::shared_ptr< T >( pt, pt2 );
351
- }
352
-
353
- template< class T, class A, class A1, class A2, class A3, class A4 >
354
- boost::shared_ptr< T > allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4 )
355
- {
356
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
357
-
358
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
359
-
360
- void * pv = pd->address();
361
-
362
- ::new( pv ) T(
363
- boost::detail::sp_forward<A1>( a1 ),
364
- boost::detail::sp_forward<A2>( a2 ),
365
- boost::detail::sp_forward<A3>( a3 ),
366
- boost::detail::sp_forward<A4>( a4 )
367
- );
368
-
369
- pd->set_initialized();
370
-
371
- T * pt2 = static_cast< T* >( pv );
372
-
373
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
374
- return boost::shared_ptr< T >( pt, pt2 );
375
- }
376
-
377
- template< class T, class A1, class A2, class A3, class A4, class A5 >
378
- boost::shared_ptr< T > make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 )
379
- {
380
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
381
-
382
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
383
-
384
- void * pv = pd->address();
385
-
386
- ::new( pv ) T(
387
- boost::detail::sp_forward<A1>( a1 ),
388
- boost::detail::sp_forward<A2>( a2 ),
389
- boost::detail::sp_forward<A3>( a3 ),
390
- boost::detail::sp_forward<A4>( a4 ),
391
- boost::detail::sp_forward<A5>( a5 )
392
- );
393
-
394
- pd->set_initialized();
395
-
396
- T * pt2 = static_cast< T* >( pv );
397
-
398
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
399
- return boost::shared_ptr< T >( pt, pt2 );
400
- }
401
-
402
- template< class T, class A, class A1, class A2, class A3, class A4, class A5 >
403
- boost::shared_ptr< T > allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 )
404
- {
405
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
406
-
407
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
408
-
409
- void * pv = pd->address();
410
-
411
- ::new( pv ) T(
412
- boost::detail::sp_forward<A1>( a1 ),
413
- boost::detail::sp_forward<A2>( a2 ),
414
- boost::detail::sp_forward<A3>( a3 ),
415
- boost::detail::sp_forward<A4>( a4 ),
416
- boost::detail::sp_forward<A5>( a5 )
417
- );
418
-
419
- pd->set_initialized();
420
-
421
- T * pt2 = static_cast< T* >( pv );
422
-
423
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
424
- return boost::shared_ptr< T >( pt, pt2 );
425
- }
426
-
427
- template< class T, class A1, class A2, class A3, class A4, class A5, class A6 >
428
- boost::shared_ptr< T > make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 )
429
- {
430
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
431
-
432
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
433
-
434
- void * pv = pd->address();
435
-
436
- ::new( pv ) T(
437
- boost::detail::sp_forward<A1>( a1 ),
438
- boost::detail::sp_forward<A2>( a2 ),
439
- boost::detail::sp_forward<A3>( a3 ),
440
- boost::detail::sp_forward<A4>( a4 ),
441
- boost::detail::sp_forward<A5>( a5 ),
442
- boost::detail::sp_forward<A6>( a6 )
443
- );
444
-
445
- pd->set_initialized();
446
-
447
- T * pt2 = static_cast< T* >( pv );
448
-
449
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
450
- return boost::shared_ptr< T >( pt, pt2 );
451
- }
452
-
453
- template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6 >
454
- boost::shared_ptr< T > allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 )
455
- {
456
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
457
-
458
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
459
-
460
- void * pv = pd->address();
461
-
462
- ::new( pv ) T(
463
- boost::detail::sp_forward<A1>( a1 ),
464
- boost::detail::sp_forward<A2>( a2 ),
465
- boost::detail::sp_forward<A3>( a3 ),
466
- boost::detail::sp_forward<A4>( a4 ),
467
- boost::detail::sp_forward<A5>( a5 ),
468
- boost::detail::sp_forward<A6>( a6 )
469
- );
470
-
471
- pd->set_initialized();
472
-
473
- T * pt2 = static_cast< T* >( pv );
474
-
475
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
476
- return boost::shared_ptr< T >( pt, pt2 );
477
- }
478
-
479
- template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 >
480
- boost::shared_ptr< T > make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 )
481
- {
482
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
483
-
484
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
485
-
486
- void * pv = pd->address();
487
-
488
- ::new( pv ) T(
489
- boost::detail::sp_forward<A1>( a1 ),
490
- boost::detail::sp_forward<A2>( a2 ),
491
- boost::detail::sp_forward<A3>( a3 ),
492
- boost::detail::sp_forward<A4>( a4 ),
493
- boost::detail::sp_forward<A5>( a5 ),
494
- boost::detail::sp_forward<A6>( a6 ),
495
- boost::detail::sp_forward<A7>( a7 )
496
- );
497
-
498
- pd->set_initialized();
499
-
500
- T * pt2 = static_cast< T* >( pv );
501
-
502
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
503
- return boost::shared_ptr< T >( pt, pt2 );
504
- }
505
-
506
- template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7 >
507
- boost::shared_ptr< T > allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 )
508
- {
509
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
510
-
511
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
512
-
513
- void * pv = pd->address();
514
-
515
- ::new( pv ) T(
516
- boost::detail::sp_forward<A1>( a1 ),
517
- boost::detail::sp_forward<A2>( a2 ),
518
- boost::detail::sp_forward<A3>( a3 ),
519
- boost::detail::sp_forward<A4>( a4 ),
520
- boost::detail::sp_forward<A5>( a5 ),
521
- boost::detail::sp_forward<A6>( a6 ),
522
- boost::detail::sp_forward<A7>( a7 )
523
- );
524
-
525
- pd->set_initialized();
526
-
527
- T * pt2 = static_cast< T* >( pv );
528
-
529
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
530
- return boost::shared_ptr< T >( pt, pt2 );
531
- }
532
-
533
- template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 >
534
- boost::shared_ptr< T > make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 )
535
- {
536
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
537
-
538
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
539
-
540
- void * pv = pd->address();
541
-
542
- ::new( pv ) T(
543
- boost::detail::sp_forward<A1>( a1 ),
544
- boost::detail::sp_forward<A2>( a2 ),
545
- boost::detail::sp_forward<A3>( a3 ),
546
- boost::detail::sp_forward<A4>( a4 ),
547
- boost::detail::sp_forward<A5>( a5 ),
548
- boost::detail::sp_forward<A6>( a6 ),
549
- boost::detail::sp_forward<A7>( a7 ),
550
- boost::detail::sp_forward<A8>( a8 )
551
- );
552
-
553
- pd->set_initialized();
554
-
555
- T * pt2 = static_cast< T* >( pv );
556
-
557
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
558
- return boost::shared_ptr< T >( pt, pt2 );
559
- }
560
-
561
- template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 >
562
- boost::shared_ptr< T > allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 )
563
- {
564
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
565
-
566
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
567
-
568
- void * pv = pd->address();
569
-
570
- ::new( pv ) T(
571
- boost::detail::sp_forward<A1>( a1 ),
572
- boost::detail::sp_forward<A2>( a2 ),
573
- boost::detail::sp_forward<A3>( a3 ),
574
- boost::detail::sp_forward<A4>( a4 ),
575
- boost::detail::sp_forward<A5>( a5 ),
576
- boost::detail::sp_forward<A6>( a6 ),
577
- boost::detail::sp_forward<A7>( a7 ),
578
- boost::detail::sp_forward<A8>( a8 )
579
- );
580
-
581
- pd->set_initialized();
582
-
583
- T * pt2 = static_cast< T* >( pv );
584
-
585
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
586
- return boost::shared_ptr< T >( pt, pt2 );
587
- }
588
-
589
- template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 >
590
- boost::shared_ptr< T > make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 )
591
- {
592
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
593
-
594
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
595
-
596
- void * pv = pd->address();
597
-
598
- ::new( pv ) T(
599
- boost::detail::sp_forward<A1>( a1 ),
600
- boost::detail::sp_forward<A2>( a2 ),
601
- boost::detail::sp_forward<A3>( a3 ),
602
- boost::detail::sp_forward<A4>( a4 ),
603
- boost::detail::sp_forward<A5>( a5 ),
604
- boost::detail::sp_forward<A6>( a6 ),
605
- boost::detail::sp_forward<A7>( a7 ),
606
- boost::detail::sp_forward<A8>( a8 ),
607
- boost::detail::sp_forward<A9>( a9 )
608
- );
609
-
610
- pd->set_initialized();
611
-
612
- T * pt2 = static_cast< T* >( pv );
613
-
614
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
615
- return boost::shared_ptr< T >( pt, pt2 );
616
- }
617
-
618
- template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 >
619
- boost::shared_ptr< T > allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 )
620
- {
621
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
622
-
623
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
624
-
625
- void * pv = pd->address();
626
-
627
- ::new( pv ) T(
628
- boost::detail::sp_forward<A1>( a1 ),
629
- boost::detail::sp_forward<A2>( a2 ),
630
- boost::detail::sp_forward<A3>( a3 ),
631
- boost::detail::sp_forward<A4>( a4 ),
632
- boost::detail::sp_forward<A5>( a5 ),
633
- boost::detail::sp_forward<A6>( a6 ),
634
- boost::detail::sp_forward<A7>( a7 ),
635
- boost::detail::sp_forward<A8>( a8 ),
636
- boost::detail::sp_forward<A9>( a9 )
637
- );
638
-
639
- pd->set_initialized();
640
-
641
- T * pt2 = static_cast< T* >( pv );
642
-
643
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
644
- return boost::shared_ptr< T >( pt, pt2 );
645
- }
646
-
647
- template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10 >
648
- boost::shared_ptr< T > make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9, A10 && a10 )
649
- {
650
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
651
-
652
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
653
-
654
- void * pv = pd->address();
655
-
656
- ::new( pv ) T(
657
- boost::detail::sp_forward<A1>( a1 ),
658
- boost::detail::sp_forward<A2>( a2 ),
659
- boost::detail::sp_forward<A3>( a3 ),
660
- boost::detail::sp_forward<A4>( a4 ),
661
- boost::detail::sp_forward<A5>( a5 ),
662
- boost::detail::sp_forward<A6>( a6 ),
663
- boost::detail::sp_forward<A7>( a7 ),
664
- boost::detail::sp_forward<A8>( a8 ),
665
- boost::detail::sp_forward<A9>( a9 ),
666
- boost::detail::sp_forward<A9>( a10 )
667
- );
668
-
669
- pd->set_initialized();
670
-
671
- T * pt2 = static_cast< T* >( pv );
672
-
673
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
674
- return boost::shared_ptr< T >( pt, pt2 );
675
- }
676
-
677
- template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10 >
678
- boost::shared_ptr< T > allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9, A10 && a10 )
679
- {
680
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
681
-
682
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
683
-
684
- void * pv = pd->address();
685
-
686
- ::new( pv ) T(
687
- boost::detail::sp_forward<A1>( a1 ),
688
- boost::detail::sp_forward<A2>( a2 ),
689
- boost::detail::sp_forward<A3>( a3 ),
690
- boost::detail::sp_forward<A4>( a4 ),
691
- boost::detail::sp_forward<A5>( a5 ),
692
- boost::detail::sp_forward<A6>( a6 ),
693
- boost::detail::sp_forward<A7>( a7 ),
694
- boost::detail::sp_forward<A8>( a8 ),
695
- boost::detail::sp_forward<A9>( a9 ),
696
- boost::detail::sp_forward<A9>( a10 )
697
- );
698
-
699
- pd->set_initialized();
700
-
701
- T * pt2 = static_cast< T* >( pv );
702
-
703
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
704
- return boost::shared_ptr< T >( pt, pt2 );
705
- }
706
-
707
- #else
708
-
709
- // C++03 version
710
-
711
- template< class T, class A1 >
712
- boost::shared_ptr< T > make_shared( A1 const & a1 )
713
- {
714
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
715
-
716
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
717
-
718
- void * pv = pd->address();
719
-
720
- ::new( pv ) T( a1 );
721
- pd->set_initialized();
722
-
723
- T * pt2 = static_cast< T* >( pv );
724
-
725
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
726
- return boost::shared_ptr< T >( pt, pt2 );
727
- }
728
-
729
- template< class T, class A, class A1 >
730
- boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1 )
731
- {
732
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
733
-
734
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
735
-
736
- void * pv = pd->address();
737
-
738
- ::new( pv ) T( a1 );
739
- pd->set_initialized();
740
-
741
- T * pt2 = static_cast< T* >( pv );
742
-
743
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
744
- return boost::shared_ptr< T >( pt, pt2 );
745
- }
746
-
747
- template< class T, class A1, class A2 >
748
- boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2 )
749
- {
750
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
751
-
752
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
753
-
754
- void * pv = pd->address();
755
-
756
- ::new( pv ) T( a1, a2 );
757
- pd->set_initialized();
758
-
759
- T * pt2 = static_cast< T* >( pv );
760
-
761
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
762
- return boost::shared_ptr< T >( pt, pt2 );
763
- }
764
-
765
- template< class T, class A, class A1, class A2 >
766
- boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2 )
767
- {
768
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
769
-
770
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
771
-
772
- void * pv = pd->address();
773
-
774
- ::new( pv ) T( a1, a2 );
775
- pd->set_initialized();
776
-
777
- T * pt2 = static_cast< T* >( pv );
778
-
779
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
780
- return boost::shared_ptr< T >( pt, pt2 );
781
- }
782
-
783
- template< class T, class A1, class A2, class A3 >
784
- boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3 )
785
- {
786
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
787
-
788
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
789
-
790
- void * pv = pd->address();
791
-
792
- ::new( pv ) T( a1, a2, a3 );
793
- pd->set_initialized();
794
-
795
- T * pt2 = static_cast< T* >( pv );
796
-
797
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
798
- return boost::shared_ptr< T >( pt, pt2 );
799
- }
800
-
801
- template< class T, class A, class A1, class A2, class A3 >
802
- boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3 )
803
- {
804
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
805
-
806
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
807
-
808
- void * pv = pd->address();
809
-
810
- ::new( pv ) T( a1, a2, a3 );
811
- pd->set_initialized();
812
-
813
- T * pt2 = static_cast< T* >( pv );
814
-
815
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
816
- return boost::shared_ptr< T >( pt, pt2 );
817
- }
818
-
819
- template< class T, class A1, class A2, class A3, class A4 >
820
- boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4 )
821
- {
822
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
823
-
824
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
825
-
826
- void * pv = pd->address();
827
-
828
- ::new( pv ) T( a1, a2, a3, a4 );
829
- pd->set_initialized();
830
-
831
- T * pt2 = static_cast< T* >( pv );
832
-
833
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
834
- return boost::shared_ptr< T >( pt, pt2 );
835
- }
836
-
837
- template< class T, class A, class A1, class A2, class A3, class A4 >
838
- boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4 )
839
- {
840
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
841
-
842
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
843
-
844
- void * pv = pd->address();
845
-
846
- ::new( pv ) T( a1, a2, a3, a4 );
847
- pd->set_initialized();
848
-
849
- T * pt2 = static_cast< T* >( pv );
850
-
851
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
852
- return boost::shared_ptr< T >( pt, pt2 );
853
- }
854
-
855
- template< class T, class A1, class A2, class A3, class A4, class A5 >
856
- boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5 )
857
- {
858
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
859
-
860
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
861
-
862
- void * pv = pd->address();
863
-
864
- ::new( pv ) T( a1, a2, a3, a4, a5 );
865
- pd->set_initialized();
866
-
867
- T * pt2 = static_cast< T* >( pv );
868
-
869
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
870
- return boost::shared_ptr< T >( pt, pt2 );
871
- }
872
-
873
- template< class T, class A, class A1, class A2, class A3, class A4, class A5 >
874
- boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5 )
875
- {
876
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
877
-
878
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
879
-
880
- void * pv = pd->address();
881
-
882
- ::new( pv ) T( a1, a2, a3, a4, a5 );
883
- pd->set_initialized();
884
-
885
- T * pt2 = static_cast< T* >( pv );
886
-
887
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
888
- return boost::shared_ptr< T >( pt, pt2 );
889
- }
890
-
891
- template< class T, class A1, class A2, class A3, class A4, class A5, class A6 >
892
- boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6 )
893
- {
894
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
895
-
896
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
897
-
898
- void * pv = pd->address();
899
-
900
- ::new( pv ) T( a1, a2, a3, a4, a5, a6 );
901
- pd->set_initialized();
902
-
903
- T * pt2 = static_cast< T* >( pv );
904
-
905
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
906
- return boost::shared_ptr< T >( pt, pt2 );
907
- }
908
-
909
- template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6 >
910
- boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6 )
911
- {
912
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
913
-
914
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
915
-
916
- void * pv = pd->address();
917
-
918
- ::new( pv ) T( a1, a2, a3, a4, a5, a6 );
919
- pd->set_initialized();
920
-
921
- T * pt2 = static_cast< T* >( pv );
922
-
923
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
924
- return boost::shared_ptr< T >( pt, pt2 );
925
- }
926
-
927
- template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 >
928
- boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7 )
929
- {
930
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
931
-
932
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
933
-
934
- void * pv = pd->address();
935
-
936
- ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7 );
937
- pd->set_initialized();
938
-
939
- T * pt2 = static_cast< T* >( pv );
940
-
941
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
942
- return boost::shared_ptr< T >( pt, pt2 );
943
- }
944
-
945
- template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7 >
946
- boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7 )
947
- {
948
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
949
-
950
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
951
-
952
- void * pv = pd->address();
953
-
954
- ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7 );
955
- pd->set_initialized();
956
-
957
- T * pt2 = static_cast< T* >( pv );
958
-
959
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
960
- return boost::shared_ptr< T >( pt, pt2 );
961
- }
962
-
963
- template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 >
964
- boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8 )
965
- {
966
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
967
-
968
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
969
-
970
- void * pv = pd->address();
971
-
972
- ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8 );
973
- pd->set_initialized();
974
-
975
- T * pt2 = static_cast< T* >( pv );
976
-
977
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
978
- return boost::shared_ptr< T >( pt, pt2 );
979
- }
980
-
981
- template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 >
982
- boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8 )
983
- {
984
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
985
-
986
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
987
-
988
- void * pv = pd->address();
989
-
990
- ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8 );
991
- pd->set_initialized();
992
-
993
- T * pt2 = static_cast< T* >( pv );
994
-
995
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
996
- return boost::shared_ptr< T >( pt, pt2 );
997
- }
998
-
999
- template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 >
1000
- boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9 )
1001
- {
1002
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
1003
-
1004
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
1005
-
1006
- void * pv = pd->address();
1007
-
1008
- ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
1009
- pd->set_initialized();
1010
-
1011
- T * pt2 = static_cast< T* >( pv );
1012
-
1013
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
1014
- return boost::shared_ptr< T >( pt, pt2 );
1015
- }
1016
-
1017
- template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 >
1018
- boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9 )
1019
- {
1020
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
1021
-
1022
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
1023
-
1024
- void * pv = pd->address();
1025
-
1026
- ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
1027
- pd->set_initialized();
1028
-
1029
- T * pt2 = static_cast< T* >( pv );
1030
-
1031
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
1032
- return boost::shared_ptr< T >( pt, pt2 );
1033
- }
1034
-
1035
- template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10 >
1036
- boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9, A10 const &a10 )
1037
- {
1038
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
1039
-
1040
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
1041
-
1042
- void * pv = pd->address();
1043
-
1044
- ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 );
1045
- pd->set_initialized();
1046
-
1047
- T * pt2 = static_cast< T* >( pv );
1048
-
1049
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
1050
- return boost::shared_ptr< T >( pt, pt2 );
1051
- }
1052
-
1053
- template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10 >
1054
- boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9, A10 const & a10 )
1055
- {
1056
- boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
1057
-
1058
- boost::detail::sp_ms_deleter< T > * pd = boost::get_deleter< boost::detail::sp_ms_deleter< T > >( pt );
1059
-
1060
- void * pv = pd->address();
1061
-
1062
- ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 );
1063
- pd->set_initialized();
1064
-
1065
- T * pt2 = static_cast< T* >( pv );
1066
-
1067
- boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
1068
- return boost::shared_ptr< T >( pt, pt2 );
1069
- }
15
+ #include <boost/smart_ptr/make_shared_object.hpp>
1070
16
 
17
+ #if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) && !defined( BOOST_NO_SFINAE )
18
+ # include <boost/smart_ptr/make_shared_array.hpp>
19
+ # include <boost/smart_ptr/allocate_shared_array.hpp>
1071
20
  #endif
1072
21
 
1073
- #undef BOOST_SP_MSD
1074
-
1075
- } // namespace boost
1076
-
1077
22
  #endif // #ifndef BOOST_SMART_PTR_MAKE_SHARED_HPP_INCLUDED