passenger 5.1.4 → 5.1.5

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 (542) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +9 -0
  3. data/CHANGELOG +9 -0
  4. data/build/cxx_tests.rb +11 -1
  5. data/build/documentation.rb +0 -32
  6. data/build/support/cxx_dependency_map.rb +602 -2
  7. data/build/test_basics.rb +3 -3
  8. data/dev/boost-patches/0001-Patch-boost-thread-so-that-oxt-thread-can-use-it.patch +48 -0
  9. data/dev/boost-patches/0002-Make-boost-thread_interrupted-derive-from-oxt-tracab.patch +33 -0
  10. data/dev/boost-patches/0003-Disable-a-Clang-pragma-to-prevent-warnings-on-OS-X.patch +25 -0
  11. data/dev/ci/README.md +121 -0
  12. data/dev/ci/lib/functions.sh +129 -0
  13. data/dev/ci/lib/set-container-envvars.sh +46 -0
  14. data/dev/ci/lib/setup-container.sh +43 -0
  15. data/dev/ci/run-tests-natively +24 -0
  16. data/dev/ci/run-tests-with-docker +42 -0
  17. data/dev/ci/scripts/debug-console-wrapper.sh +27 -0
  18. data/dev/ci/scripts/docker-entrypoint-stage2.sh +17 -0
  19. data/dev/ci/scripts/docker-entrypoint.sh +17 -0
  20. data/dev/ci/scripts/inituidgid +17 -0
  21. data/dev/ci/scripts/run-tests-natively-stage2.sh +17 -0
  22. data/dev/ci/scripts/setup-host-natively.sh +11 -0
  23. data/dev/ci/setup-host +50 -0
  24. data/dev/ci/tests/apache2/run +6 -0
  25. data/dev/ci/tests/apache2/setup +4 -0
  26. data/dev/ci/tests/cxx/run +9 -0
  27. data/dev/ci/tests/cxx/setup +4 -0
  28. data/dev/ci/tests/nginx-dynamic/run +20 -0
  29. data/dev/ci/tests/nginx-dynamic/setup +4 -0
  30. data/dev/ci/tests/nginx/run +5 -0
  31. data/dev/ci/tests/nginx/setup +4 -0
  32. data/dev/ci/tests/nodejs/run +4 -0
  33. data/dev/ci/tests/nodejs/setup +4 -0
  34. data/dev/ci/tests/ruby/run +4 -0
  35. data/dev/ci/tests/ruby/setup +4 -0
  36. data/dev/ci/tests/source-packaging/run +4 -0
  37. data/dev/ci/tests/source-packaging/setup +4 -0
  38. data/dev/ci/tests/standalone/run +4 -0
  39. data/dev/ci/tests/standalone/setup +4 -0
  40. data/dev/copy_boost_headers +8 -2
  41. data/src/agent/Core/ApiServer.h +11 -5
  42. data/src/agent/Core/Controller.h +12 -46
  43. data/src/agent/Core/Controller/CheckoutSession.cpp +1 -1
  44. data/src/agent/Core/Controller/Config.h +369 -0
  45. data/src/agent/Core/Controller/ForwardResponse.cpp +4 -4
  46. data/src/agent/Core/Controller/Hooks.cpp +15 -3
  47. data/src/agent/Core/Controller/Implementation.cpp +1 -1
  48. data/src/agent/Core/Controller/InitRequest.cpp +28 -39
  49. data/src/agent/Core/Controller/InitializationAndShutdown.cpp +25 -60
  50. data/src/agent/Core/Controller/InternalUtils.cpp +0 -16
  51. data/src/agent/Core/Controller/Miscellaneous.cpp +0 -17
  52. data/src/agent/Core/Controller/Request.h +2 -0
  53. data/src/agent/Core/Controller/SendRequest.cpp +4 -4
  54. data/src/agent/Core/Controller/{StateInspectionAndConfiguration.cpp → StateInspection.cpp} +0 -22
  55. data/src/agent/Core/Controller/TurboCaching.h +11 -10
  56. data/src/agent/Core/CoreMain.cpp +16 -6
  57. data/src/agent/Core/ResponseCache.h +3 -3
  58. data/src/agent/Core/SpawningKit/SmartSpawner.h +9 -3
  59. data/src/agent/Core/SpawningKit/Spawner.h +7 -3
  60. data/src/agent/UstRouter/ApiServer.h +3 -2
  61. data/src/agent/UstRouter/Controller.h +66 -32
  62. data/src/agent/UstRouter/UstRouterMain.cpp +10 -2
  63. data/src/agent/Watchdog/ApiServer.h +3 -2
  64. data/src/agent/Watchdog/WatchdogMain.cpp +3 -1
  65. data/src/apache2_module/ConfigurationCommands.cpp +1 -1
  66. data/src/cxx_supportlib/ConfigKit/Common.h +125 -0
  67. data/src/cxx_supportlib/ConfigKit/ConfigKit.h +34 -0
  68. data/src/cxx_supportlib/ConfigKit/README.md +895 -0
  69. data/src/cxx_supportlib/ConfigKit/Schema.h +331 -0
  70. data/src/cxx_supportlib/ConfigKit/Store.h +385 -0
  71. data/src/cxx_supportlib/ConfigKit/TableTranslator.h +185 -0
  72. data/src/cxx_supportlib/ConfigKit/Utils.h +141 -0
  73. data/src/cxx_supportlib/ConfigKit/VariantMapUtils.h +81 -0
  74. data/src/cxx_supportlib/Constants.h +1 -1
  75. data/src/cxx_supportlib/Crypto.cpp +2 -2
  76. data/src/cxx_supportlib/Logging.h +0 -35
  77. data/src/cxx_supportlib/ServerKit/HttpServer.h +35 -16
  78. data/src/cxx_supportlib/ServerKit/Server.h +65 -25
  79. data/src/cxx_supportlib/oxt/macros.hpp +3 -0
  80. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/replace.hpp +0 -2
  81. data/src/cxx_supportlib/vendor-modified/boost/array.hpp +53 -42
  82. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_template.hpp +11 -5
  83. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +13 -2
  84. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_x86.hpp +23 -0
  85. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_msvc_x86.hpp +5 -0
  86. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +3 -2
  87. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/interlocked.hpp +8 -1
  88. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_emulated.hpp +3 -1
  89. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_alpha.hpp +2 -0
  90. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm.hpp +2 -0
  91. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_atomic.hpp +5 -0
  92. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc.hpp +2 -0
  93. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sparc.hpp +6 -4
  94. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sync.hpp +2 -0
  95. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86.hpp +3 -1
  96. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86_dcas.hpp +28 -17
  97. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_linux_arm.hpp +2 -0
  98. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_arm.hpp +2 -0
  99. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_x86.hpp +9 -4
  100. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +3 -3
  101. data/src/cxx_supportlib/vendor-modified/boost/bind/arg.hpp +10 -3
  102. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +90 -18
  103. data/src/cxx_supportlib/vendor-modified/boost/cerrno.hpp +2 -2
  104. data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +1 -1
  105. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +8 -3
  106. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +2 -0
  107. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +35 -6
  108. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +2 -0
  109. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/comeau.hpp +1 -1
  110. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +2 -0
  111. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/compaq_cxx.hpp +1 -1
  112. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +3 -1
  113. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +2 -0
  114. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +19 -4
  115. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +3 -1
  116. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/greenhills.hpp +1 -1
  117. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/hp_acc.hpp +3 -1
  118. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +29 -7
  119. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/kai.hpp +1 -1
  120. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +2 -0
  121. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +2 -0
  122. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +16 -0
  123. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +2 -0
  124. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pgi.hpp +2 -0
  125. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sgi_mipspro.hpp +1 -1
  126. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +10 -1
  127. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +2 -0
  128. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +44 -16
  129. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +4 -0
  130. data/src/cxx_supportlib/vendor-modified/boost/config/platform/cygwin.hpp +1 -2
  131. data/src/cxx_supportlib/vendor-modified/boost/config/platform/linux.hpp +1 -1
  132. data/src/cxx_supportlib/vendor-modified/boost/config/select_compiler_config.hpp +21 -21
  133. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +42 -1
  134. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcomo.hpp +7 -0
  135. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +40 -7
  136. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +39 -6
  137. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/modena.hpp +7 -0
  138. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/msl.hpp +7 -0
  139. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/roguewave.hpp +7 -0
  140. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/sgi.hpp +8 -1
  141. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/stlport.hpp +7 -0
  142. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/vacpp.hpp +7 -0
  143. data/src/cxx_supportlib/vendor-modified/boost/config/suffix.hpp +33 -4
  144. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +0 -2
  145. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +0 -3
  146. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +34 -27
  147. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +62 -26
  148. data/src/cxx_supportlib/vendor-modified/boost/container/detail/addressof.hpp +2 -2
  149. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +4 -4
  150. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +4 -4
  151. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +2 -0
  152. data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +39 -5
  153. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +49 -32
  154. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +175 -7
  155. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +223 -98
  156. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_sorted.hpp +57 -0
  157. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +88 -41
  158. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +7 -8
  159. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +4 -9
  160. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +45 -18
  161. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +205 -26
  162. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +290 -181
  163. data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_init.hpp +2 -0
  164. data/src/cxx_supportlib/vendor-modified/boost/container/detail/variadic_templates_tools.hpp +24 -19
  165. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +38 -0
  166. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +320 -46
  167. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +91 -18
  168. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +23 -19
  169. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +491 -120
  170. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +4 -4
  171. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +0 -3
  172. data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +399 -0
  173. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/deque.hpp +2 -0
  174. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_map.hpp +4 -0
  175. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_set.hpp +4 -0
  176. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/list.hpp +2 -0
  177. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/map.hpp +4 -0
  178. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/set.hpp +4 -0
  179. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/slist.hpp +2 -0
  180. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/small_vector.hpp +2 -0
  181. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/stable_vector.hpp +2 -0
  182. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/string.hpp +2 -0
  183. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/vector.hpp +2 -0
  184. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +101 -20
  185. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +19 -14
  186. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +117 -59
  187. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +8 -6
  188. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +33 -28
  189. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +414 -70
  190. data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +1 -0
  191. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator_fwd.hpp +2 -2
  192. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +134 -117
  193. data/src/cxx_supportlib/vendor-modified/boost/core/addressof.hpp +202 -99
  194. data/src/cxx_supportlib/vendor-modified/boost/core/demangle.hpp +8 -10
  195. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +217 -1
  196. data/src/cxx_supportlib/vendor-modified/boost/core/scoped_enum.hpp +29 -27
  197. data/src/cxx_supportlib/vendor-modified/boost/current_function.hpp +5 -1
  198. data/src/cxx_supportlib/vendor-modified/boost/date_time/c_time.hpp +13 -13
  199. data/src/cxx_supportlib/vendor-modified/boost/date_time/constrained_value.hpp +3 -3
  200. data/src/cxx_supportlib/vendor-modified/boost/date_time/date.hpp +2 -1
  201. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration.hpp +4 -3
  202. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration_types.hpp +6 -5
  203. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_facet.hpp +2 -2
  204. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_names_put.hpp +8 -7
  205. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_calendar.hpp +2 -1
  206. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_date.hpp +2 -1
  207. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_day.hpp +4 -3
  208. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_day_of_year.hpp +3 -2
  209. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_duration.hpp +2 -1
  210. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_duration_types.hpp +4 -3
  211. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_facet.hpp +27 -7
  212. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_month.hpp +5 -5
  213. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_serialize.hpp +5 -0
  214. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_weekday.hpp +4 -4
  215. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_year.hpp +4 -5
  216. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.hpp +2 -1
  217. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_date_time.hpp +5 -4
  218. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/posix_time_zone.hpp +4 -3
  219. data/src/cxx_supportlib/vendor-modified/boost/date_time/period.hpp +3 -2
  220. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/date_duration_operators.hpp +1 -1
  221. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_config.hpp +2 -2
  222. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_duration.hpp +5 -4
  223. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/ptime.hpp +6 -5
  224. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_parsers.hpp +4 -0
  225. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_duration.hpp +2 -2
  226. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_facet.hpp +5 -4
  227. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_zone_base.hpp +2 -1
  228. data/src/cxx_supportlib/vendor-modified/boost/date_time/year_month_day.hpp +3 -1
  229. data/src/cxx_supportlib/vendor-modified/boost/detail/iterator.hpp +13 -0
  230. data/src/cxx_supportlib/vendor-modified/boost/detail/lcast_precision.hpp +1 -0
  231. data/src/cxx_supportlib/vendor-modified/boost/detail/workaround.hpp +5 -0
  232. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +11 -0
  233. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/shared_ptr.hpp +17 -0
  234. data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +25 -3
  235. data/src/cxx_supportlib/vendor-modified/boost/exception/get_error_info.hpp +2 -1
  236. data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +114 -1
  237. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +116 -142
  238. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +57 -69
  239. data/src/cxx_supportlib/vendor-modified/boost/functional/hash/detail/hash_float.hpp +1 -1
  240. data/src/cxx_supportlib/vendor-modified/boost/functional/hash/extensions.hpp +3 -3
  241. data/src/cxx_supportlib/vendor-modified/boost/functional/hash/hash.hpp +27 -13
  242. data/src/cxx_supportlib/vendor-modified/boost/intrusive/any_hook.hpp +4 -2
  243. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set.hpp +99 -12
  244. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set_hook.hpp +4 -2
  245. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +35 -4
  246. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +37 -6
  247. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set.hpp +95 -8
  248. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set_hook.hpp +4 -2
  249. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +209 -72
  250. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +86 -20
  251. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +11 -11
  252. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +6 -6
  253. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algo_type.hpp +4 -1
  254. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +58 -45
  255. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/avltree_node.hpp +27 -26
  256. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/bstree_algorithms_base.hpp +2 -2
  257. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +7 -7
  258. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/config_begin.hpp +8 -3
  259. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/default_header_holder.hpp +4 -3
  260. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +27 -26
  261. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/equal_to_value.hpp +3 -1
  262. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/exception_disposer.hpp +4 -2
  263. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +9 -7
  264. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/has_member_function_callable_with.hpp +83 -57
  265. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hashtable_node.hpp +30 -30
  266. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +9 -8
  267. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iiterator.hpp +8 -7
  268. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +16 -15
  269. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/key_nodeptr_comp.hpp +70 -44
  270. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_iterator.hpp +22 -21
  271. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_node.hpp +7 -6
  272. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/parent_from_member.hpp +5 -4
  273. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/rbtree_node.hpp +29 -28
  274. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/reverse_iterator.hpp +33 -12
  275. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/size_holder.hpp +19 -12
  276. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_iterator.hpp +21 -20
  277. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_node.hpp +4 -3
  278. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/to_raw_pointer.hpp +3 -2
  279. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/transform_iterator.hpp +23 -22
  280. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_iterator.hpp +23 -22
  281. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_node.hpp +10 -9
  282. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +103 -29
  283. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +15 -0
  284. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +295 -211
  285. data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +2 -2
  286. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +20 -7
  287. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list_hook.hpp +4 -2
  288. data/src/cxx_supportlib/vendor-modified/boost/intrusive/member_value_traits.hpp +5 -4
  289. data/src/cxx_supportlib/vendor-modified/boost/intrusive/options.hpp +4 -4
  290. data/src/cxx_supportlib/vendor-modified/boost/intrusive/parent_from_member.hpp +3 -2
  291. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_plus_bits.hpp +4 -4
  292. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +4 -4
  293. data/src/cxx_supportlib/vendor-modified/boost/intrusive/priority_compare.hpp +22 -4
  294. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree.hpp +36 -4
  295. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +43 -13
  296. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set.hpp +95 -8
  297. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set_hook.hpp +4 -2
  298. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sg_set.hpp +96 -12
  299. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree.hpp +102 -5
  300. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +48 -4
  301. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +20 -11
  302. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist_hook.hpp +9 -2
  303. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splay_set.hpp +95 -8
  304. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree.hpp +36 -4
  305. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +27 -0
  306. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap.hpp +167 -23
  307. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +28 -0
  308. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_set.hpp +100 -46
  309. data/src/cxx_supportlib/vendor-modified/boost/intrusive/trivial_value_traits.hpp +5 -4
  310. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +37 -27
  311. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +30 -14
  312. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +1 -1
  313. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +35 -36
  314. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +6 -28
  315. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +20 -5
  316. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/posix_api.cpp +4 -2
  317. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex.cpp +3 -1
  318. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once.cpp +5 -0
  319. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +11 -7
  320. data/src/cxx_supportlib/vendor-modified/boost/math/policies/policy.hpp +1 -3
  321. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/fpclassify.hpp +5 -1
  322. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/math_fwd.hpp +11 -0
  323. data/src/cxx_supportlib/vendor-modified/boost/math/tools/config.hpp +10 -2
  324. data/src/cxx_supportlib/vendor-modified/boost/move/adl_move_swap.hpp +40 -7
  325. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +67 -0
  326. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +63 -0
  327. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +2437 -0
  328. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/basic_op.hpp +121 -0
  329. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/insertion_sort.hpp +127 -0
  330. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge.hpp +637 -0
  331. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge_sort.hpp +139 -0
  332. data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +155 -0
  333. data/src/cxx_supportlib/vendor-modified/boost/move/algorithm.hpp +1 -116
  334. data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +14 -13
  335. data/src/cxx_supportlib/vendor-modified/boost/move/default_delete.hpp +17 -1
  336. data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +2 -0
  337. data/src/cxx_supportlib/vendor-modified/boost/move/detail/destruct_n.hpp +67 -0
  338. data/src/cxx_supportlib/vendor-modified/boost/move/detail/fwd_macros.hpp +227 -32
  339. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_traits.hpp +4 -0
  340. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +30 -9
  341. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils_core.hpp +12 -0
  342. data/src/cxx_supportlib/vendor-modified/boost/move/detail/move_helpers.hpp +84 -80
  343. data/src/cxx_supportlib/vendor-modified/boost/move/detail/placement_new.hpp +30 -0
  344. data/src/cxx_supportlib/vendor-modified/boost/move/detail/reverse_iterator.hpp +171 -0
  345. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +14 -20
  346. data/src/cxx_supportlib/vendor-modified/boost/move/detail/unique_ptr_meta_utils.hpp +1 -1
  347. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +14 -0
  348. data/src/cxx_supportlib/vendor-modified/boost/move/iterator.hpp +32 -33
  349. data/src/cxx_supportlib/vendor-modified/boost/move/make_unique.hpp +2 -1
  350. data/src/cxx_supportlib/vendor-modified/boost/move/unique_ptr.hpp +49 -49
  351. data/src/cxx_supportlib/vendor-modified/boost/move/utility.hpp +8 -7
  352. data/src/cxx_supportlib/vendor-modified/boost/move/utility_core.hpp +17 -16
  353. data/src/cxx_supportlib/vendor-modified/boost/mpl/print.hpp +3 -0
  354. data/src/cxx_supportlib/vendor-modified/boost/none.hpp +1 -1
  355. data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +2 -3
  356. data/src/cxx_supportlib/vendor-modified/boost/operators.hpp +197 -255
  357. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +1059 -0
  358. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_aligned_storage.hpp +75 -0
  359. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_config.hpp +116 -0
  360. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_factory_support.hpp +36 -0
  361. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +253 -0
  362. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +196 -0
  363. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_swap.hpp +117 -0
  364. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +372 -554
  365. data/src/cxx_supportlib/vendor-modified/boost/optional/optional_fwd.hpp +12 -1
  366. data/src/cxx_supportlib/vendor-modified/boost/pool/detail/mutex.hpp +15 -7
  367. data/src/cxx_supportlib/vendor-modified/boost/pool/pool_alloc.hpp +24 -0
  368. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/intel.h +9 -2
  369. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/visualc.h +15 -1
  370. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd.h +16 -4
  371. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86.h +3 -3
  372. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86_amd.h +4 -4
  373. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86_amd/versions.h +4 -4
  374. data/src/cxx_supportlib/vendor-modified/boost/predef/os/cygwin.h +1 -1
  375. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +2 -2
  376. data/src/cxx_supportlib/vendor-modified/boost/predef/version_number.h +20 -1
  377. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/cat.hpp +1 -1
  378. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/config.hpp +6 -6
  379. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/binary_transform.hpp +5 -6
  380. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/to_list_msvc.hpp +55 -0
  381. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/to_list.hpp +12 -0
  382. data/src/cxx_supportlib/vendor-modified/boost/range/const_iterator.hpp +4 -4
  383. data/src/cxx_supportlib/vendor-modified/boost/range/size_type.hpp +0 -5
  384. data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +16 -16
  385. data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +4 -4
  386. data/src/cxx_supportlib/vendor-modified/boost/regex/pending/unicode_iterator.hpp +3 -0
  387. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +102 -87
  388. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +45 -21
  389. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cpp_regex_traits.hpp +4 -4
  390. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/fileiter.hpp +2 -2
  391. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/instances.hpp +1 -1
  392. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +14 -2
  393. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp +46 -0
  394. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +5 -2
  395. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +5 -14
  396. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +116 -13
  397. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_recursive.hpp +34 -0
  398. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +2 -2
  399. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits.hpp +1 -1
  400. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +3 -3
  401. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +1 -0
  402. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +2 -2
  403. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +1004 -159
  404. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/bad_weak_ptr.hpp +9 -0
  405. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count.hpp +3 -0
  406. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +4 -58
  407. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base.hpp +5 -2
  408. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_clang.hpp +9 -0
  409. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +0 -8
  410. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_sync.hpp +3 -3
  411. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_noexcept.hpp +30 -0
  412. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock.hpp +3 -0
  413. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/enable_shared_from_this.hpp +5 -4
  414. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +28 -3
  415. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ref_counter.hpp +187 -0
  416. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_array.hpp +52 -144
  417. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_object.hpp +120 -450
  418. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +2 -1
  419. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +2 -1
  420. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_array.hpp +7 -6
  421. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +70 -8
  422. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/weak_ptr.hpp +6 -5
  423. data/src/cxx_supportlib/vendor-modified/boost/system/error_code.hpp +9 -8
  424. data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +3 -3
  425. data/src/cxx_supportlib/vendor-modified/boost/thread/barrier.hpp +5 -4
  426. data/src/cxx_supportlib/vendor-modified/boost/thread/completion_latch.hpp +0 -1
  427. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/queue_views.hpp +0 -11
  428. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_timed_queue.hpp +6 -4
  429. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/config.hpp +11 -2
  430. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +11 -4
  431. data/src/cxx_supportlib/vendor-modified/boost/thread/exceptions.hpp +8 -8
  432. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/executor.hpp +1 -1
  433. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/generic_executor_ref.hpp +5 -5
  434. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/loop_executor.hpp +22 -18
  435. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +163 -55
  436. data/src/cxx_supportlib/vendor-modified/boost/thread/futures/launch.hpp +1 -0
  437. data/src/cxx_supportlib/vendor-modified/boost/thread/futures/wait_for_all.hpp +1 -1
  438. data/src/cxx_supportlib/vendor-modified/boost/thread/lock_types.hpp +9 -9
  439. data/src/cxx_supportlib/vendor-modified/boost/thread/locks.hpp +1 -0
  440. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable.hpp +6 -7
  441. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable_fwd.hpp +17 -2
  442. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/shared_mutex.hpp +2 -2
  443. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_data.hpp +5 -5
  444. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/timespec.hpp +29 -0
  445. data/src/cxx_supportlib/vendor-modified/boost/thread/scoped_thread.hpp +23 -18
  446. data/src/cxx_supportlib/vendor-modified/boost/thread/synchronized_value.hpp +6 -6
  447. data/src/cxx_supportlib/vendor-modified/boost/thread/thread_functors.hpp +19 -4
  448. data/src/cxx_supportlib/vendor-modified/boost/thread/thread_guard.hpp +3 -3
  449. data/src/cxx_supportlib/vendor-modified/boost/thread/user_scheduler.hpp +1 -1
  450. data/src/cxx_supportlib/vendor-modified/boost/type_index.hpp +265 -0
  451. data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +272 -0
  452. data/src/cxx_supportlib/vendor-modified/boost/type_index/type_index_facade.hpp +300 -0
  453. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_reference.hpp +3 -3
  454. data/src/cxx_supportlib/vendor-modified/boost/type_traits/aligned_storage.hpp +6 -6
  455. data/src/cxx_supportlib/vendor-modified/boost/type_traits/common_type.hpp +1 -0
  456. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/common_arithmetic_type.hpp +9 -3
  457. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/mp_defer.hpp +3 -3
  458. data/src/cxx_supportlib/vendor-modified/boost/type_traits/extent.hpp +1 -0
  459. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_assign.hpp +2 -1
  460. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_constructor.hpp +2 -1
  461. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_destructor.hpp +1 -1
  462. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_assign.hpp +2 -1
  463. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_copy.hpp +1 -0
  464. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_destructor.hpp +1 -1
  465. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_assign.hpp +1 -0
  466. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_constructor.hpp +1 -0
  467. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_abstract.hpp +1 -0
  468. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_array.hpp +1 -1
  469. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_assignable.hpp +1 -0
  470. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_const.hpp +2 -1
  471. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_default_constructible.hpp +21 -1
  472. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_destructible.hpp +1 -0
  473. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_assignable.hpp +1 -1
  474. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_constructible.hpp +2 -1
  475. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_pod.hpp +1 -0
  476. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_rvalue_reference.hpp +1 -1
  477. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_virtual_base_of.hpp +1 -1
  478. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_volatile.hpp +2 -1
  479. data/src/cxx_supportlib/vendor-modified/boost/type_traits/make_void.hpp +52 -0
  480. data/src/cxx_supportlib/vendor-modified/boost/type_traits/rank.hpp +1 -0
  481. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_all_extents.hpp +1 -1
  482. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_const.hpp +1 -1
  483. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_cv.hpp +1 -1
  484. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_extent.hpp +1 -1
  485. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_pointer.hpp +1 -1
  486. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_volatile.hpp +1 -1
  487. data/src/cxx_supportlib/vendor-modified/boost/type_traits/type_with_alignment.hpp +1 -1
  488. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fwd.hpp +40 -6
  489. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +4986 -0
  490. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/map.hpp +107 -0
  491. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/set.hpp +105 -0
  492. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +1814 -1255
  493. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +41 -45
  494. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +1498 -1161
  495. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +40 -44
  496. data/src/cxx_supportlib/vendor-modified/boost/utility.hpp +2 -2
  497. data/src/cxx_supportlib/vendor-modified/boost/utility/base_from_member.hpp +7 -6
  498. data/src/cxx_supportlib/vendor-modified/boost/utility/compare_pointees.hpp +10 -2
  499. data/src/cxx_supportlib/vendor-modified/boost/utility/string_ref.hpp +39 -22
  500. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +690 -0
  501. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view_fwd.hpp +39 -0
  502. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  503. data/src/helper-scripts/crash-watch.rb +3 -0
  504. data/src/ruby_supportlib/phusion_passenger.rb +1 -1
  505. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +1 -0
  506. data/src/ruby_supportlib/phusion_passenger/packaging.rb +2 -12
  507. metadata +77 -38
  508. data/dev/ci/inituidgid +0 -24
  509. data/dev/ci/run_jenkins.sh +0 -70
  510. data/dev/ci/run_travis.sh +0 -314
  511. data/doc/Design and Architecture.html +0 -2421
  512. data/doc/Design and Architecture.txt +0 -511
  513. data/doc/Security of user switching support.html +0 -1833
  514. data/doc/Users guide Apache.html +0 -3101
  515. data/doc/Users guide Apache.idmap.txt +0 -451
  516. data/doc/Users guide Apache.txt +0 -534
  517. data/doc/Users guide Nginx.html +0 -3026
  518. data/doc/Users guide Nginx.idmap.txt +0 -431
  519. data/doc/Users guide Nginx.txt +0 -451
  520. data/doc/Users guide Standalone.html +0 -2092
  521. data/doc/Users guide Standalone.idmap.txt +0 -137
  522. data/doc/Users guide Standalone.txt +0 -81
  523. data/doc/Users guide.html +0 -1606
  524. data/doc/Users guide.txt +0 -8
  525. data/src/cxx_supportlib/vendor-modified/boost/align/align.hpp +0 -20
  526. data/src/cxx_supportlib/vendor-modified/boost/align/detail/address.hpp +0 -29
  527. data/src/cxx_supportlib/vendor-modified/boost/align/detail/align.hpp +0 -40
  528. data/src/cxx_supportlib/vendor-modified/boost/align/detail/align_cxx11.hpp +0 -22
  529. data/src/cxx_supportlib/vendor-modified/boost/align/detail/is_alignment.hpp +0 -29
  530. data/src/cxx_supportlib/vendor-modified/boost/container/detail/hash_table.hpp +0 -383
  531. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_allocator.hpp +0 -318
  532. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_count_impl.hpp +0 -67
  533. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_traits.hpp +0 -60
  534. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_utility.hpp +0 -214
  535. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_if_array.hpp +0 -34
  536. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/allocate.hpp +0 -1128
  537. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/buckets.hpp +0 -928
  538. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/equivalent.hpp +0 -686
  539. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/extract_key.hpp +0 -188
  540. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/table.hpp +0 -873
  541. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/unique.hpp +0 -628
  542. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/util.hpp +0 -266
@@ -25,6 +25,7 @@
25
25
  #endif
26
26
 
27
27
  #include <boost/move/detail/config_begin.hpp>
28
+ #include <boost/move/detail/workaround.hpp> //forceinline
28
29
  #include <boost/move/utility_core.hpp>
29
30
  #include <boost/move/traits.hpp>
30
31
 
@@ -39,7 +40,7 @@
39
40
  //////////////////////////////////////////////////////////////////////////////
40
41
 
41
42
  template <class T>
42
- inline typename ::boost::move_detail::enable_if_c
43
+ BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c
43
44
  < enable_move_utility_emulation<T>::value && !has_move_emulation_enabled<T>::value
44
45
  , typename ::boost::move_detail::add_const<T>::type &
45
46
  >::type
@@ -49,7 +50,7 @@
49
50
  }
50
51
 
51
52
  template <class T>
52
- inline typename ::boost::move_detail::enable_if_c
53
+ BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c
53
54
  < enable_move_utility_emulation<T>::value && has_move_emulation_enabled<T>::value
54
55
  && ::boost::move_detail::is_nothrow_move_constructible_or_uncopyable<T>::value, rv<T>&>::type
55
56
  move_if_noexcept(T& x) BOOST_NOEXCEPT
@@ -58,7 +59,7 @@
58
59
  }
59
60
 
60
61
  template <class T>
61
- inline typename ::boost::move_detail::enable_if_c
62
+ BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c
62
63
  < enable_move_utility_emulation<T>::value && has_move_emulation_enabled<T>::value
63
64
  && ::boost::move_detail::is_nothrow_move_constructible_or_uncopyable<T>::value
64
65
  , rv<T>&
@@ -69,7 +70,7 @@
69
70
  }
70
71
 
71
72
  template <class T>
72
- inline typename ::boost::move_detail::enable_if_c
73
+ BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c
73
74
  < enable_move_utility_emulation<T>::value && has_move_emulation_enabled<T>::value
74
75
  && !::boost::move_detail::is_nothrow_move_constructible_or_uncopyable<T>::value
75
76
  , typename ::boost::move_detail::add_const<T>::type &
@@ -80,7 +81,7 @@
80
81
  }
81
82
 
82
83
  template <class T>
83
- inline typename ::boost::move_detail::enable_if_c
84
+ BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c
84
85
  < enable_move_utility_emulation<T>::value && has_move_emulation_enabled<T>::value
85
86
  && !::boost::move_detail::is_nothrow_move_constructible_or_uncopyable<T>::value
86
87
  , typename ::boost::move_detail::add_const<T>::type &
@@ -125,13 +126,13 @@
125
126
  #else //BOOST_MOVE_DOXYGEN_INVOKED
126
127
 
127
128
  template <class T>
128
- typename ::boost::move_detail::enable_if_c
129
+ BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c
129
130
  < ::boost::move_detail::is_nothrow_move_constructible_or_uncopyable<T>::value, T&&>::type
130
131
  move_if_noexcept(T& x) BOOST_NOEXCEPT
131
132
  { return ::boost::move(x); }
132
133
 
133
134
  template <class T>
134
- typename ::boost::move_detail::enable_if_c
135
+ BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c
135
136
  < !::boost::move_detail::is_nothrow_move_constructible_or_uncopyable<T>::value, const T&>::type
136
137
  move_if_noexcept(T& x) BOOST_NOEXCEPT
137
138
  { return x; }
@@ -26,6 +26,7 @@
26
26
  #endif
27
27
 
28
28
  #include <boost/move/detail/config_begin.hpp>
29
+ #include <boost/move/detail/workaround.hpp> //forceinline
29
30
  #include <boost/move/core.hpp>
30
31
  #include <boost/move/detail/meta_utils.hpp>
31
32
  #include <boost/static_assert.hpp>
@@ -47,7 +48,7 @@
47
48
  //////////////////////////////////////////////////////////////////////////////
48
49
 
49
50
  template <class T>
50
- inline typename ::boost::move_detail::enable_if_and
51
+ BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_and
51
52
  < T &
52
53
  , enable_move_utility_emulation<T>
53
54
  , has_move_emulation_disabled<T>
@@ -58,7 +59,7 @@
58
59
  }
59
60
 
60
61
  template <class T>
61
- inline typename ::boost::move_detail::enable_if_and
62
+ BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_and
62
63
  < rv<T>&
63
64
  , enable_move_utility_emulation<T>
64
65
  , has_move_emulation_enabled<T>
@@ -69,7 +70,7 @@
69
70
  }
70
71
 
71
72
  template <class T>
72
- inline typename ::boost::move_detail::enable_if_and
73
+ BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_and
73
74
  < rv<T>&
74
75
  , enable_move_utility_emulation<T>
75
76
  , has_move_emulation_enabled<T>
@@ -86,7 +87,7 @@
86
87
  //////////////////////////////////////////////////////////////////////////////
87
88
 
88
89
  template <class T>
89
- inline typename ::boost::move_detail::enable_if_and
90
+ BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_and
90
91
  < T &
91
92
  , enable_move_utility_emulation<T>
92
93
  , ::boost::move_detail::is_rv<T>
@@ -97,7 +98,7 @@
97
98
  }
98
99
 
99
100
  template <class T>
100
- inline typename ::boost::move_detail::enable_if_and
101
+ BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_and
101
102
  < const T &
102
103
  , enable_move_utility_emulation<T>
103
104
  , ::boost::move_detail::is_not_rv<T>
@@ -114,7 +115,7 @@
114
115
  //////////////////////////////////////////////////////////////////////////////
115
116
 
116
117
  template <class T>
117
- inline typename ::boost::move_detail::enable_if_and
118
+ BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_and
118
119
  < T &
119
120
  , enable_move_utility_emulation<T>
120
121
  , ::boost::move_detail::is_rv<T>
@@ -125,7 +126,7 @@
125
126
  }
126
127
 
127
128
  template <class T>
128
- inline typename ::boost::move_detail::enable_if_and
129
+ BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_and
129
130
  < typename ::boost::move_detail::add_lvalue_reference<T>::type
130
131
  , enable_move_utility_emulation<T>
131
132
  , ::boost::move_detail::is_not_rv<T>
@@ -140,7 +141,7 @@
140
141
  }
141
142
 
142
143
  template <class T>
143
- inline typename ::boost::move_detail::enable_if_and
144
+ BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_and
144
145
  < rv<T>&
145
146
  , enable_move_utility_emulation<T>
146
147
  , ::boost::move_detail::is_not_rv<T>
@@ -202,13 +203,13 @@
202
203
 
203
204
  //Old move approach, lvalues could bind to rvalue references
204
205
  template <class T>
205
- inline typename ::boost::move_detail::remove_reference<T>::type && move(T&& t) BOOST_NOEXCEPT
206
+ BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::remove_reference<T>::type && move(T&& t) BOOST_NOEXCEPT
206
207
  { return t; }
207
208
 
208
209
  #else //BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES
209
210
 
210
211
  template <class T>
211
- inline typename ::boost::move_detail::remove_reference<T>::type && move(T&& t) BOOST_NOEXCEPT
212
+ BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::remove_reference<T>::type && move(T&& t) BOOST_NOEXCEPT
212
213
  { return static_cast<typename ::boost::move_detail::remove_reference<T>::type &&>(t); }
213
214
 
214
215
  #endif //BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES
@@ -238,17 +239,17 @@
238
239
  //Old move approach, lvalues could bind to rvalue references
239
240
 
240
241
  template <class T>
241
- inline T&& forward(typename ::boost::move_detail::identity<T>::type&& t) BOOST_NOEXCEPT
242
+ BOOST_MOVE_FORCEINLINE T&& forward(typename ::boost::move_detail::identity<T>::type&& t) BOOST_NOEXCEPT
242
243
  { return t; }
243
244
 
244
245
  #else //Old move
245
246
 
246
247
  template <class T>
247
- inline T&& forward(typename ::boost::move_detail::remove_reference<T>::type& t) BOOST_NOEXCEPT
248
+ BOOST_MOVE_FORCEINLINE T&& forward(typename ::boost::move_detail::remove_reference<T>::type& t) BOOST_NOEXCEPT
248
249
  { return static_cast<T&&>(t); }
249
250
 
250
251
  template <class T>
251
- inline T&& forward(typename ::boost::move_detail::remove_reference<T>::type&& t) BOOST_NOEXCEPT
252
+ BOOST_MOVE_FORCEINLINE T&& forward(typename ::boost::move_detail::remove_reference<T>::type&& t) BOOST_NOEXCEPT
252
253
  {
253
254
  //"boost::forward<T> error: 'T' is a lvalue reference, can't forward as rvalue.";
254
255
  BOOST_STATIC_ASSERT(!boost::move_detail::is_lvalue_reference<T>::value);
@@ -273,17 +274,17 @@
273
274
  //Old move approach, lvalues could bind to rvalue references
274
275
 
275
276
  template <class T>
276
- inline T&& move_if_not_lvalue_reference(typename ::boost::move_detail::identity<T>::type&& t) BOOST_NOEXCEPT
277
+ BOOST_MOVE_FORCEINLINE T&& move_if_not_lvalue_reference(typename ::boost::move_detail::identity<T>::type&& t) BOOST_NOEXCEPT
277
278
  { return t; }
278
279
 
279
280
  #else //Old move
280
281
 
281
282
  template <class T>
282
- inline T&& move_if_not_lvalue_reference(typename ::boost::move_detail::remove_reference<T>::type& t) BOOST_NOEXCEPT
283
+ BOOST_MOVE_FORCEINLINE T&& move_if_not_lvalue_reference(typename ::boost::move_detail::remove_reference<T>::type& t) BOOST_NOEXCEPT
283
284
  { return static_cast<T&&>(t); }
284
285
 
285
286
  template <class T>
286
- inline T&& move_if_not_lvalue_reference(typename ::boost::move_detail::remove_reference<T>::type&& t) BOOST_NOEXCEPT
287
+ BOOST_MOVE_FORCEINLINE T&& move_if_not_lvalue_reference(typename ::boost::move_detail::remove_reference<T>::type&& t) BOOST_NOEXCEPT
287
288
  {
288
289
  //"boost::forward<T> error: 'T' is a lvalue reference, can't forward as rvalue.";
289
290
  BOOST_STATIC_ASSERT(!boost::move_detail::is_lvalue_reference<T>::value);
@@ -47,7 +47,10 @@ struct print
47
47
  #endif
48
48
  {
49
49
  #if defined(__clang__)
50
+ # pragma clang diagnostic push
51
+ # pragma clang diagnostic ignored "-Wc++11-extensions"
50
52
  const int m_x = 1 / (sizeof(T) - sizeof(T));
53
+ # pragma clang diagnostic pop
51
54
  #elif defined(BOOST_MSVC)
52
55
  enum { n = sizeof(T) + -1 };
53
56
  #elif defined(__MWERKS__)
@@ -1,5 +1,5 @@
1
1
  // Copyright (C) 2003, Fernando Luis Cacciola Carballal.
2
- // Copyright (C) 2014 Andrzej Krzemienski.
2
+ // Copyright (C) 2014, 2015 Andrzej Krzemienski.
3
3
  //
4
4
  // Distributed under the Boost Software License, Version 1.0.
5
5
  // (See accompanying file LICENSE_1_0.txt or copy at
@@ -1,5 +1,5 @@
1
1
  // Copyright (C) 2003, Fernando Luis Cacciola Carballal.
2
- // Copyright (C) 2014 Andrzej Krzemienski.
2
+ // Copyright (C) 2014, 2015 Andrzej Krzemienski.
3
3
  //
4
4
  // Use, modification, and distribution is subject to the Boost Software
5
5
  // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -29,7 +29,7 @@ class none_t {};
29
29
  struct none_t
30
30
  {
31
31
  struct init_tag{};
32
- explicit none_t(init_tag){} // to prevent default constructor
32
+ explicit none_t(init_tag){} // to disable default constructor
33
33
  };
34
34
 
35
35
  #endif // old implementation workarounds
@@ -37,4 +37,3 @@ struct none_t
37
37
  } // namespace boost
38
38
 
39
39
  #endif // header guard
40
-
@@ -1,6 +1,7 @@
1
1
  // Boost operators.hpp header file ----------------------------------------//
2
2
 
3
3
  // (C) Copyright David Abrahams, Jeremy Siek, Daryle Walker 1999-2001.
4
+ // (C) Copyright Daniel Frey 2002-2016.
4
5
  // Distributed under the Boost Software License, Version 1.0. (See
5
6
  // accompanying file LICENSE_1_0.txt or copy at
6
7
  // http://www.boost.org/LICENSE_1_0.txt)
@@ -8,6 +9,8 @@
8
9
  // See http://www.boost.org/libs/utility/operators.htm for documentation.
9
10
 
10
11
  // Revision History
12
+ // 22 Feb 16 Added ADL protection, preserve old work-arounds in
13
+ // operators_v1.hpp and clean up this file. (Daniel Frey)
11
14
  // 16 Dec 10 Limit warning suppression for 4284 to older versions of VC++
12
15
  // (Matthew Bradbury, fixes #4432)
13
16
  // 07 Aug 08 Added "euclidean" spelling. (Daniel Frey)
@@ -24,8 +27,8 @@
24
27
  // additional classes for groups of related operators added;
25
28
  // workaround for empty base class optimization
26
29
  // bug of GCC 3.0 (Helmut Zeisel)
27
- // 25 Jun 01 output_iterator_helper changes: removed default template
28
- // parameters, added support for self-proxying, additional
30
+ // 25 Jun 01 output_iterator_helper changes: removed default template
31
+ // parameters, added support for self-proxying, additional
29
32
  // documentation and tests (Aleksey Gurtovoy)
30
33
  // 29 May 01 Added operator classes for << and >>. Added input and output
31
34
  // iterator helper classes. Added classes to connect equality and
@@ -38,18 +41,18 @@
38
41
  // 04 Jul 00 Fixed NO_OPERATORS_IN_NAMESPACE bugs, major cleanup and
39
42
  // refactoring of compiler workarounds, additional documentation
40
43
  // (Alexy Gurtovoy and Mark Rodgers with some help and prompting from
41
- // Dave Abrahams)
44
+ // Dave Abrahams)
42
45
  // 28 Jun 00 General cleanup and integration of bugfixes from Mark Rodgers and
43
46
  // Jeremy Siek (Dave Abrahams)
44
47
  // 20 Jun 00 Changes to accommodate Borland C++Builder 4 and Borland C++ 5.5
45
48
  // (Mark Rodgers)
46
49
  // 20 Jun 00 Minor fixes to the prior revision (Aleksey Gurtovoy)
47
50
  // 10 Jun 00 Support for the base class chaining technique was added
48
- // (Aleksey Gurtovoy). See documentation and the comments below
49
- // for the details.
51
+ // (Aleksey Gurtovoy). See documentation and the comments below
52
+ // for the details.
50
53
  // 12 Dec 99 Initial version with iterator operators (Jeremy Siek)
51
54
  // 18 Nov 99 Change name "divideable" to "dividable", remove unnecessary
52
- // specializations of dividable, subtractable, modable (Ed Brey)
55
+ // specializations of dividable, subtractable, modable (Ed Brey)
53
56
  // 17 Nov 99 Add comments (Beman Dawes)
54
57
  // Remove unnecessary specialization of operators<> (Ed Brey)
55
58
  // 15 Nov 99 Fix less_than_comparable<T,U> second operand type for first two
@@ -60,8 +63,8 @@
60
63
  // 10 Nov 99 Initial version
61
64
 
62
65
  // 10 Jun 00:
63
- // An additional optional template parameter was added to most of
64
- // operator templates to support the base class chaining technique (see
66
+ // An additional optional template parameter was added to most of
67
+ // operator templates to support the base class chaining technique (see
65
68
  // documentation for the details). Unfortunately, a straightforward
66
69
  // implementation of this change would have broken compatibility with the
67
70
  // previous version of the library by making it impossible to use the same
@@ -70,18 +73,24 @@
70
73
  // issue at the cost of some simplicity.
71
74
  //
72
75
  // One of the complications is an existence of special auxiliary class template
73
- // 'is_chained_base<>' (see 'detail' namespace below), which is used
76
+ // 'is_chained_base<>' (see 'operators_detail' namespace below), which is used
74
77
  // to determine whether its template parameter is a library's operator template
75
- // or not. You have to specialize 'is_chained_base<>' for each new
78
+ // or not. You have to specialize 'is_chained_base<>' for each new
76
79
  // operator template you add to the library.
77
80
  //
78
- // However, most of the non-trivial implementation details are hidden behind
81
+ // However, most of the non-trivial implementation details are hidden behind
79
82
  // several local macros defined below, and as soon as you understand them,
80
- // you understand the whole library implementation.
83
+ // you understand the whole library implementation.
81
84
 
82
85
  #ifndef BOOST_OPERATORS_HPP
83
86
  #define BOOST_OPERATORS_HPP
84
87
 
88
+ // If old work-arounds are needed, refer to the preserved version without
89
+ // ADL protection.
90
+ #if defined(BOOST_NO_OPERATORS_IN_NAMESPACE) || defined(BOOST_USE_OPERATORS_V1)
91
+ #include "operators_v1.hpp"
92
+ #else
93
+
85
94
  #include <cstddef>
86
95
  #include <iterator>
87
96
 
@@ -93,35 +102,30 @@
93
102
  #endif
94
103
 
95
104
  #if BOOST_WORKAROUND(BOOST_MSVC, < 1600)
96
- # pragma warning( disable : 4284 ) // complaint about return type of
105
+ # pragma warning( disable : 4284 ) // complaint about return type of
97
106
  #endif // operator-> not begin a UDT
98
107
 
99
- namespace boost {
100
- namespace detail {
101
-
102
- template <typename T> class empty_base {};
103
-
104
- } // namespace detail
105
- } // namespace boost
106
-
107
108
  // In this section we supply the xxxx1 and xxxx2 forms of the operator
108
109
  // templates, which are explicitly targeted at the 1-type-argument and
109
- // 2-type-argument operator forms, respectively. Some compilers get confused
110
- // when inline friend functions are overloaded in namespaces other than the
111
- // global namespace. When BOOST_NO_OPERATORS_IN_NAMESPACE is defined, all of
112
- // these templates must go in the global namespace.
110
+ // 2-type-argument operator forms, respectively.
113
111
 
114
- #ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
115
112
  namespace boost
116
113
  {
117
- #endif
114
+ namespace operators_impl
115
+ {
116
+ namespace operators_detail
117
+ {
118
+
119
+ template <typename T> class empty_base {};
120
+
121
+ } // namespace operators_detail
118
122
 
119
123
  // Basic operator classes (contributed by Dave Abrahams) ------------------//
120
124
 
121
125
  // Note that friend functions defined in a class are implicitly inline.
122
126
  // See the C++ std, 11.4 [class.friend] paragraph 5
123
127
 
124
- template <class T, class U, class B = ::boost::detail::empty_base<T> >
128
+ template <class T, class U, class B = operators_detail::empty_base<T> >
125
129
  struct less_than_comparable2 : B
126
130
  {
127
131
  friend bool operator<=(const T& x, const U& y) { return !static_cast<bool>(x > y); }
@@ -132,7 +136,7 @@ struct less_than_comparable2 : B
132
136
  friend bool operator>=(const U& x, const T& y) { return !static_cast<bool>(y > x); }
133
137
  };
134
138
 
135
- template <class T, class B = ::boost::detail::empty_base<T> >
139
+ template <class T, class B = operators_detail::empty_base<T> >
136
140
  struct less_than_comparable1 : B
137
141
  {
138
142
  friend bool operator>(const T& x, const T& y) { return y < x; }
@@ -140,7 +144,7 @@ struct less_than_comparable1 : B
140
144
  friend bool operator>=(const T& x, const T& y) { return !static_cast<bool>(x < y); }
141
145
  };
142
146
 
143
- template <class T, class U, class B = ::boost::detail::empty_base<T> >
147
+ template <class T, class U, class B = operators_detail::empty_base<T> >
144
148
  struct equality_comparable2 : B
145
149
  {
146
150
  friend bool operator==(const U& y, const T& x) { return x == y; }
@@ -148,7 +152,7 @@ struct equality_comparable2 : B
148
152
  friend bool operator!=(const T& y, const U& x) { return !static_cast<bool>(y == x); }
149
153
  };
150
154
 
151
- template <class T, class B = ::boost::detail::empty_base<T> >
155
+ template <class T, class B = operators_detail::empty_base<T> >
152
156
  struct equality_comparable1 : B
153
157
  {
154
158
  friend bool operator!=(const T& x, const T& y) { return !static_cast<bool>(x == y); }
@@ -166,39 +170,39 @@ struct equality_comparable1 : B
166
170
  // If the compiler has no NRVO, this is the best symmetric
167
171
  // implementation available.
168
172
 
169
- #define BOOST_BINARY_OPERATOR_COMMUTATIVE( NAME, OP ) \
170
- template <class T, class U, class B = ::boost::detail::empty_base<T> > \
171
- struct NAME##2 : B \
172
- { \
173
- friend T operator OP( const T& lhs, const U& rhs ) \
174
- { T nrv( lhs ); nrv OP##= rhs; return nrv; } \
175
- friend T operator OP( const U& lhs, const T& rhs ) \
176
- { T nrv( rhs ); nrv OP##= lhs; return nrv; } \
177
- }; \
178
- \
179
- template <class T, class B = ::boost::detail::empty_base<T> > \
180
- struct NAME##1 : B \
181
- { \
182
- friend T operator OP( const T& lhs, const T& rhs ) \
183
- { T nrv( lhs ); nrv OP##= rhs; return nrv; } \
173
+ #define BOOST_BINARY_OPERATOR_COMMUTATIVE( NAME, OP ) \
174
+ template <class T, class U, class B = operators_detail::empty_base<T> > \
175
+ struct NAME##2 : B \
176
+ { \
177
+ friend T operator OP( const T& lhs, const U& rhs ) \
178
+ { T nrv( lhs ); nrv OP##= rhs; return nrv; } \
179
+ friend T operator OP( const U& lhs, const T& rhs ) \
180
+ { T nrv( rhs ); nrv OP##= lhs; return nrv; } \
181
+ }; \
182
+ \
183
+ template <class T, class B = operators_detail::empty_base<T> > \
184
+ struct NAME##1 : B \
185
+ { \
186
+ friend T operator OP( const T& lhs, const T& rhs ) \
187
+ { T nrv( lhs ); nrv OP##= rhs; return nrv; } \
184
188
  };
185
189
 
186
190
  #define BOOST_BINARY_OPERATOR_NON_COMMUTATIVE( NAME, OP ) \
187
- template <class T, class U, class B = ::boost::detail::empty_base<T> > \
191
+ template <class T, class U, class B = operators_detail::empty_base<T> > \
188
192
  struct NAME##2 : B \
189
193
  { \
190
194
  friend T operator OP( const T& lhs, const U& rhs ) \
191
195
  { T nrv( lhs ); nrv OP##= rhs; return nrv; } \
192
196
  }; \
193
197
  \
194
- template <class T, class U, class B = ::boost::detail::empty_base<T> > \
198
+ template <class T, class U, class B = operators_detail::empty_base<T> > \
195
199
  struct BOOST_OPERATOR2_LEFT(NAME) : B \
196
200
  { \
197
201
  friend T operator OP( const U& lhs, const T& rhs ) \
198
202
  { T nrv( lhs ); nrv OP##= rhs; return nrv; } \
199
203
  }; \
200
204
  \
201
- template <class T, class B = ::boost::detail::empty_base<T> > \
205
+ template <class T, class B = operators_detail::empty_base<T> > \
202
206
  struct NAME##1 : B \
203
207
  { \
204
208
  friend T operator OP( const T& lhs, const T& rhs ) \
@@ -213,34 +217,34 @@ struct NAME##1 : B \
213
217
  // optimization opportunities to the compiler :)
214
218
 
215
219
  #define BOOST_BINARY_OPERATOR_COMMUTATIVE( NAME, OP ) \
216
- template <class T, class U, class B = ::boost::detail::empty_base<T> > \
220
+ template <class T, class U, class B = operators_detail::empty_base<T> > \
217
221
  struct NAME##2 : B \
218
222
  { \
219
223
  friend T operator OP( T lhs, const U& rhs ) { return lhs OP##= rhs; } \
220
224
  friend T operator OP( const U& lhs, T rhs ) { return rhs OP##= lhs; } \
221
225
  }; \
222
226
  \
223
- template <class T, class B = ::boost::detail::empty_base<T> > \
227
+ template <class T, class B = operators_detail::empty_base<T> > \
224
228
  struct NAME##1 : B \
225
229
  { \
226
230
  friend T operator OP( T lhs, const T& rhs ) { return lhs OP##= rhs; } \
227
231
  };
228
232
 
229
233
  #define BOOST_BINARY_OPERATOR_NON_COMMUTATIVE( NAME, OP ) \
230
- template <class T, class U, class B = ::boost::detail::empty_base<T> > \
234
+ template <class T, class U, class B = operators_detail::empty_base<T> > \
231
235
  struct NAME##2 : B \
232
236
  { \
233
237
  friend T operator OP( T lhs, const U& rhs ) { return lhs OP##= rhs; } \
234
238
  }; \
235
239
  \
236
- template <class T, class U, class B = ::boost::detail::empty_base<T> > \
240
+ template <class T, class U, class B = operators_detail::empty_base<T> > \
237
241
  struct BOOST_OPERATOR2_LEFT(NAME) : B \
238
242
  { \
239
243
  friend T operator OP( const U& lhs, const T& rhs ) \
240
244
  { return T( lhs ) OP##= rhs; } \
241
245
  }; \
242
246
  \
243
- template <class T, class B = ::boost::detail::empty_base<T> > \
247
+ template <class T, class B = operators_detail::empty_base<T> > \
244
248
  struct NAME##1 : B \
245
249
  { \
246
250
  friend T operator OP( T lhs, const T& rhs ) { return lhs OP##= rhs; } \
@@ -263,7 +267,7 @@ BOOST_BINARY_OPERATOR_COMMUTATIVE( orable, | )
263
267
 
264
268
  // incrementable and decrementable contributed by Jeremy Siek
265
269
 
266
- template <class T, class B = ::boost::detail::empty_base<T> >
270
+ template <class T, class B = operators_detail::empty_base<T> >
267
271
  struct incrementable : B
268
272
  {
269
273
  friend T operator++(T& x, int)
@@ -276,7 +280,7 @@ private: // The use of this typedef works around a Borland bug
276
280
  typedef T incrementable_type;
277
281
  };
278
282
 
279
- template <class T, class B = ::boost::detail::empty_base<T> >
283
+ template <class T, class B = operators_detail::empty_base<T> >
280
284
  struct decrementable : B
281
285
  {
282
286
  friend T operator--(T& x, int)
@@ -291,16 +295,16 @@ private: // The use of this typedef works around a Borland bug
291
295
 
292
296
  // Iterator operator classes (contributed by Jeremy Siek) ------------------//
293
297
 
294
- template <class T, class P, class B = ::boost::detail::empty_base<T> >
298
+ template <class T, class P, class B = operators_detail::empty_base<T> >
295
299
  struct dereferenceable : B
296
300
  {
297
301
  P operator->() const
298
- {
299
- return &*static_cast<const T&>(*this);
302
+ {
303
+ return &*static_cast<const T&>(*this);
300
304
  }
301
305
  };
302
306
 
303
- template <class T, class I, class R, class B = ::boost::detail::empty_base<T> >
307
+ template <class T, class I, class R, class B = operators_detail::empty_base<T> >
304
308
  struct indexable : B
305
309
  {
306
310
  R operator[](I n) const
@@ -314,34 +318,34 @@ struct indexable : B
314
318
 
315
319
  #if defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)
316
320
 
317
- #define BOOST_BINARY_OPERATOR( NAME, OP ) \
318
- template <class T, class U, class B = ::boost::detail::empty_base<T> > \
319
- struct NAME##2 : B \
320
- { \
321
- friend T operator OP( const T& lhs, const U& rhs ) \
322
- { T nrv( lhs ); nrv OP##= rhs; return nrv; } \
323
- }; \
324
- \
325
- template <class T, class B = ::boost::detail::empty_base<T> > \
326
- struct NAME##1 : B \
327
- { \
328
- friend T operator OP( const T& lhs, const T& rhs ) \
329
- { T nrv( lhs ); nrv OP##= rhs; return nrv; } \
321
+ #define BOOST_BINARY_OPERATOR( NAME, OP ) \
322
+ template <class T, class U, class B = operators_detail::empty_base<T> > \
323
+ struct NAME##2 : B \
324
+ { \
325
+ friend T operator OP( const T& lhs, const U& rhs ) \
326
+ { T nrv( lhs ); nrv OP##= rhs; return nrv; } \
327
+ }; \
328
+ \
329
+ template <class T, class B = operators_detail::empty_base<T> > \
330
+ struct NAME##1 : B \
331
+ { \
332
+ friend T operator OP( const T& lhs, const T& rhs ) \
333
+ { T nrv( lhs ); nrv OP##= rhs; return nrv; } \
330
334
  };
331
335
 
332
336
  #else // defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)
333
337
 
334
- #define BOOST_BINARY_OPERATOR( NAME, OP ) \
335
- template <class T, class U, class B = ::boost::detail::empty_base<T> > \
336
- struct NAME##2 : B \
337
- { \
338
- friend T operator OP( T lhs, const U& rhs ) { return lhs OP##= rhs; } \
339
- }; \
340
- \
341
- template <class T, class B = ::boost::detail::empty_base<T> > \
342
- struct NAME##1 : B \
343
- { \
344
- friend T operator OP( T lhs, const T& rhs ) { return lhs OP##= rhs; } \
338
+ #define BOOST_BINARY_OPERATOR( NAME, OP ) \
339
+ template <class T, class U, class B = operators_detail::empty_base<T> > \
340
+ struct NAME##2 : B \
341
+ { \
342
+ friend T operator OP( T lhs, const U& rhs ) { return lhs OP##= rhs; } \
343
+ }; \
344
+ \
345
+ template <class T, class B = operators_detail::empty_base<T> > \
346
+ struct NAME##1 : B \
347
+ { \
348
+ friend T operator OP( T lhs, const T& rhs ) { return lhs OP##= rhs; } \
345
349
  };
346
350
 
347
351
  #endif // defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)
@@ -351,7 +355,7 @@ BOOST_BINARY_OPERATOR( right_shiftable, >> )
351
355
 
352
356
  #undef BOOST_BINARY_OPERATOR
353
357
 
354
- template <class T, class U, class B = ::boost::detail::empty_base<T> >
358
+ template <class T, class U, class B = operators_detail::empty_base<T> >
355
359
  struct equivalent2 : B
356
360
  {
357
361
  friend bool operator==(const T& x, const U& y)
@@ -360,7 +364,7 @@ struct equivalent2 : B
360
364
  }
361
365
  };
362
366
 
363
- template <class T, class B = ::boost::detail::empty_base<T> >
367
+ template <class T, class B = operators_detail::empty_base<T> >
364
368
  struct equivalent1 : B
365
369
  {
366
370
  friend bool operator==(const T&x, const T&y)
@@ -369,7 +373,7 @@ struct equivalent1 : B
369
373
  }
370
374
  };
371
375
 
372
- template <class T, class U, class B = ::boost::detail::empty_base<T> >
376
+ template <class T, class U, class B = operators_detail::empty_base<T> >
373
377
  struct partially_ordered2 : B
374
378
  {
375
379
  friend bool operator<=(const T& x, const U& y)
@@ -386,7 +390,7 @@ struct partially_ordered2 : B
386
390
  { return static_cast<bool>(y < x) || static_cast<bool>(y == x); }
387
391
  };
388
392
 
389
- template <class T, class B = ::boost::detail::empty_base<T> >
393
+ template <class T, class B = operators_detail::empty_base<T> >
390
394
  struct partially_ordered1 : B
391
395
  {
392
396
  friend bool operator>(const T& x, const T& y)
@@ -399,161 +403,161 @@ struct partially_ordered1 : B
399
403
 
400
404
  // Combined operator classes (contributed by Daryle Walker) ----------------//
401
405
 
402
- template <class T, class U, class B = ::boost::detail::empty_base<T> >
406
+ template <class T, class U, class B = operators_detail::empty_base<T> >
403
407
  struct totally_ordered2
404
408
  : less_than_comparable2<T, U
405
409
  , equality_comparable2<T, U, B
406
410
  > > {};
407
411
 
408
- template <class T, class B = ::boost::detail::empty_base<T> >
412
+ template <class T, class B = operators_detail::empty_base<T> >
409
413
  struct totally_ordered1
410
414
  : less_than_comparable1<T
411
415
  , equality_comparable1<T, B
412
416
  > > {};
413
417
 
414
- template <class T, class U, class B = ::boost::detail::empty_base<T> >
418
+ template <class T, class U, class B = operators_detail::empty_base<T> >
415
419
  struct additive2
416
420
  : addable2<T, U
417
421
  , subtractable2<T, U, B
418
422
  > > {};
419
423
 
420
- template <class T, class B = ::boost::detail::empty_base<T> >
424
+ template <class T, class B = operators_detail::empty_base<T> >
421
425
  struct additive1
422
426
  : addable1<T
423
427
  , subtractable1<T, B
424
428
  > > {};
425
429
 
426
- template <class T, class U, class B = ::boost::detail::empty_base<T> >
430
+ template <class T, class U, class B = operators_detail::empty_base<T> >
427
431
  struct multiplicative2
428
432
  : multipliable2<T, U
429
433
  , dividable2<T, U, B
430
434
  > > {};
431
435
 
432
- template <class T, class B = ::boost::detail::empty_base<T> >
436
+ template <class T, class B = operators_detail::empty_base<T> >
433
437
  struct multiplicative1
434
438
  : multipliable1<T
435
439
  , dividable1<T, B
436
440
  > > {};
437
441
 
438
- template <class T, class U, class B = ::boost::detail::empty_base<T> >
442
+ template <class T, class U, class B = operators_detail::empty_base<T> >
439
443
  struct integer_multiplicative2
440
444
  : multiplicative2<T, U
441
445
  , modable2<T, U, B
442
446
  > > {};
443
447
 
444
- template <class T, class B = ::boost::detail::empty_base<T> >
448
+ template <class T, class B = operators_detail::empty_base<T> >
445
449
  struct integer_multiplicative1
446
450
  : multiplicative1<T
447
451
  , modable1<T, B
448
452
  > > {};
449
453
 
450
- template <class T, class U, class B = ::boost::detail::empty_base<T> >
454
+ template <class T, class U, class B = operators_detail::empty_base<T> >
451
455
  struct arithmetic2
452
456
  : additive2<T, U
453
457
  , multiplicative2<T, U, B
454
458
  > > {};
455
459
 
456
- template <class T, class B = ::boost::detail::empty_base<T> >
460
+ template <class T, class B = operators_detail::empty_base<T> >
457
461
  struct arithmetic1
458
462
  : additive1<T
459
463
  , multiplicative1<T, B
460
464
  > > {};
461
465
 
462
- template <class T, class U, class B = ::boost::detail::empty_base<T> >
466
+ template <class T, class U, class B = operators_detail::empty_base<T> >
463
467
  struct integer_arithmetic2
464
468
  : additive2<T, U
465
469
  , integer_multiplicative2<T, U, B
466
470
  > > {};
467
471
 
468
- template <class T, class B = ::boost::detail::empty_base<T> >
472
+ template <class T, class B = operators_detail::empty_base<T> >
469
473
  struct integer_arithmetic1
470
474
  : additive1<T
471
475
  , integer_multiplicative1<T, B
472
476
  > > {};
473
477
 
474
- template <class T, class U, class B = ::boost::detail::empty_base<T> >
478
+ template <class T, class U, class B = operators_detail::empty_base<T> >
475
479
  struct bitwise2
476
480
  : xorable2<T, U
477
481
  , andable2<T, U
478
482
  , orable2<T, U, B
479
483
  > > > {};
480
484
 
481
- template <class T, class B = ::boost::detail::empty_base<T> >
485
+ template <class T, class B = operators_detail::empty_base<T> >
482
486
  struct bitwise1
483
487
  : xorable1<T
484
488
  , andable1<T
485
489
  , orable1<T, B
486
490
  > > > {};
487
491
 
488
- template <class T, class B = ::boost::detail::empty_base<T> >
492
+ template <class T, class B = operators_detail::empty_base<T> >
489
493
  struct unit_steppable
490
494
  : incrementable<T
491
495
  , decrementable<T, B
492
496
  > > {};
493
497
 
494
- template <class T, class U, class B = ::boost::detail::empty_base<T> >
498
+ template <class T, class U, class B = operators_detail::empty_base<T> >
495
499
  struct shiftable2
496
500
  : left_shiftable2<T, U
497
501
  , right_shiftable2<T, U, B
498
502
  > > {};
499
503
 
500
- template <class T, class B = ::boost::detail::empty_base<T> >
504
+ template <class T, class B = operators_detail::empty_base<T> >
501
505
  struct shiftable1
502
506
  : left_shiftable1<T
503
507
  , right_shiftable1<T, B
504
508
  > > {};
505
509
 
506
- template <class T, class U, class B = ::boost::detail::empty_base<T> >
510
+ template <class T, class U, class B = operators_detail::empty_base<T> >
507
511
  struct ring_operators2
508
512
  : additive2<T, U
509
513
  , subtractable2_left<T, U
510
514
  , multipliable2<T, U, B
511
515
  > > > {};
512
516
 
513
- template <class T, class B = ::boost::detail::empty_base<T> >
517
+ template <class T, class B = operators_detail::empty_base<T> >
514
518
  struct ring_operators1
515
519
  : additive1<T
516
520
  , multipliable1<T, B
517
521
  > > {};
518
522
 
519
- template <class T, class U, class B = ::boost::detail::empty_base<T> >
523
+ template <class T, class U, class B = operators_detail::empty_base<T> >
520
524
  struct ordered_ring_operators2
521
525
  : ring_operators2<T, U
522
526
  , totally_ordered2<T, U, B
523
527
  > > {};
524
528
 
525
- template <class T, class B = ::boost::detail::empty_base<T> >
529
+ template <class T, class B = operators_detail::empty_base<T> >
526
530
  struct ordered_ring_operators1
527
531
  : ring_operators1<T
528
532
  , totally_ordered1<T, B
529
533
  > > {};
530
534
 
531
- template <class T, class U, class B = ::boost::detail::empty_base<T> >
535
+ template <class T, class U, class B = operators_detail::empty_base<T> >
532
536
  struct field_operators2
533
537
  : ring_operators2<T, U
534
538
  , dividable2<T, U
535
539
  , dividable2_left<T, U, B
536
540
  > > > {};
537
541
 
538
- template <class T, class B = ::boost::detail::empty_base<T> >
542
+ template <class T, class B = operators_detail::empty_base<T> >
539
543
  struct field_operators1
540
544
  : ring_operators1<T
541
545
  , dividable1<T, B
542
546
  > > {};
543
547
 
544
- template <class T, class U, class B = ::boost::detail::empty_base<T> >
548
+ template <class T, class U, class B = operators_detail::empty_base<T> >
545
549
  struct ordered_field_operators2
546
550
  : field_operators2<T, U
547
551
  , totally_ordered2<T, U, B
548
552
  > > {};
549
553
 
550
- template <class T, class B = ::boost::detail::empty_base<T> >
554
+ template <class T, class B = operators_detail::empty_base<T> >
551
555
  struct ordered_field_operators1
552
556
  : field_operators1<T
553
557
  , totally_ordered1<T, B
554
558
  > > {};
555
559
 
556
- template <class T, class U, class B = ::boost::detail::empty_base<T> >
560
+ template <class T, class U, class B = operators_detail::empty_base<T> >
557
561
  struct euclidian_ring_operators2
558
562
  : ring_operators2<T, U
559
563
  , dividable2<T, U
@@ -562,26 +566,26 @@ struct euclidian_ring_operators2
562
566
  , modable2_left<T, U, B
563
567
  > > > > > {};
564
568
 
565
- template <class T, class B = ::boost::detail::empty_base<T> >
569
+ template <class T, class B = operators_detail::empty_base<T> >
566
570
  struct euclidian_ring_operators1
567
571
  : ring_operators1<T
568
572
  , dividable1<T
569
573
  , modable1<T, B
570
574
  > > > {};
571
575
 
572
- template <class T, class U, class B = ::boost::detail::empty_base<T> >
576
+ template <class T, class U, class B = operators_detail::empty_base<T> >
573
577
  struct ordered_euclidian_ring_operators2
574
578
  : totally_ordered2<T, U
575
579
  , euclidian_ring_operators2<T, U, B
576
580
  > > {};
577
581
 
578
- template <class T, class B = ::boost::detail::empty_base<T> >
582
+ template <class T, class B = operators_detail::empty_base<T> >
579
583
  struct ordered_euclidian_ring_operators1
580
584
  : totally_ordered1<T
581
585
  , euclidian_ring_operators1<T, B
582
586
  > > {};
583
587
 
584
- template <class T, class U, class B = ::boost::detail::empty_base<T> >
588
+ template <class T, class U, class B = operators_detail::empty_base<T> >
585
589
  struct euclidean_ring_operators2
586
590
  : ring_operators2<T, U
587
591
  , dividable2<T, U
@@ -590,43 +594,43 @@ struct euclidean_ring_operators2
590
594
  , modable2_left<T, U, B
591
595
  > > > > > {};
592
596
 
593
- template <class T, class B = ::boost::detail::empty_base<T> >
597
+ template <class T, class B = operators_detail::empty_base<T> >
594
598
  struct euclidean_ring_operators1
595
599
  : ring_operators1<T
596
600
  , dividable1<T
597
601
  , modable1<T, B
598
602
  > > > {};
599
603
 
600
- template <class T, class U, class B = ::boost::detail::empty_base<T> >
604
+ template <class T, class U, class B = operators_detail::empty_base<T> >
601
605
  struct ordered_euclidean_ring_operators2
602
606
  : totally_ordered2<T, U
603
607
  , euclidean_ring_operators2<T, U, B
604
608
  > > {};
605
609
 
606
- template <class T, class B = ::boost::detail::empty_base<T> >
610
+ template <class T, class B = operators_detail::empty_base<T> >
607
611
  struct ordered_euclidean_ring_operators1
608
612
  : totally_ordered1<T
609
613
  , euclidean_ring_operators1<T, B
610
614
  > > {};
611
615
 
612
- template <class T, class P, class B = ::boost::detail::empty_base<T> >
616
+ template <class T, class P, class B = operators_detail::empty_base<T> >
613
617
  struct input_iteratable
614
618
  : equality_comparable1<T
615
619
  , incrementable<T
616
620
  , dereferenceable<T, P, B
617
621
  > > > {};
618
622
 
619
- template <class T, class B = ::boost::detail::empty_base<T> >
623
+ template <class T, class B = operators_detail::empty_base<T> >
620
624
  struct output_iteratable
621
625
  : incrementable<T, B
622
626
  > {};
623
627
 
624
- template <class T, class P, class B = ::boost::detail::empty_base<T> >
628
+ template <class T, class P, class B = operators_detail::empty_base<T> >
625
629
  struct forward_iteratable
626
630
  : input_iteratable<T, P, B
627
631
  > {};
628
632
 
629
- template <class T, class P, class B = ::boost::detail::empty_base<T> >
633
+ template <class T, class P, class B = operators_detail::empty_base<T> >
630
634
  struct bidirectional_iteratable
631
635
  : forward_iteratable<T, P
632
636
  , decrementable<T, B
@@ -636,7 +640,7 @@ struct bidirectional_iteratable
636
640
  // which is an indirect base class of bidirectional_iterable,
637
641
  // random_access_iteratable must not be derived from totally_ordered1
638
642
  // but from less_than_comparable1 only. (Helmut Zeisel, 02-Dec-2001)
639
- template <class T, class P, class D, class R, class B = ::boost::detail::empty_base<T> >
643
+ template <class T, class P, class D, class R, class B = operators_detail::empty_base<T> >
640
644
  struct random_access_iteratable
641
645
  : bidirectional_iteratable<T, P
642
646
  , less_than_comparable1<T
@@ -644,124 +648,64 @@ struct random_access_iteratable
644
648
  , indexable<T, D, R, B
645
649
  > > > > {};
646
650
 
647
- #ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
648
- } // namespace boost
649
- #endif // BOOST_NO_OPERATORS_IN_NAMESPACE
650
-
651
651
 
652
- // BOOST_IMPORT_TEMPLATE1 .. BOOST_IMPORT_TEMPLATE4 -
653
652
  //
654
- // When BOOST_NO_OPERATORS_IN_NAMESPACE is defined we need a way to import an
655
- // operator template into the boost namespace. BOOST_IMPORT_TEMPLATE1 is used
656
- // for one-argument forms of operator templates; BOOST_IMPORT_TEMPLATE2 for
657
- // two-argument forms. Note that these macros expect to be invoked from within
658
- // boost.
659
-
660
- #ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
661
-
662
- // The template is already in boost so we have nothing to do.
663
- # define BOOST_IMPORT_TEMPLATE4(template_name)
664
- # define BOOST_IMPORT_TEMPLATE3(template_name)
665
- # define BOOST_IMPORT_TEMPLATE2(template_name)
666
- # define BOOST_IMPORT_TEMPLATE1(template_name)
667
-
668
- #else // BOOST_NO_OPERATORS_IN_NAMESPACE
669
-
670
- # ifndef BOOST_NO_USING_TEMPLATE
671
-
672
- // Bring the names in with a using-declaration
673
- // to avoid stressing the compiler.
674
- # define BOOST_IMPORT_TEMPLATE4(template_name) using ::template_name;
675
- # define BOOST_IMPORT_TEMPLATE3(template_name) using ::template_name;
676
- # define BOOST_IMPORT_TEMPLATE2(template_name) using ::template_name;
677
- # define BOOST_IMPORT_TEMPLATE1(template_name) using ::template_name;
678
-
679
- # else
680
-
681
- // Otherwise, because a Borland C++ 5.5 bug prevents a using declaration
682
- // from working, we are forced to use inheritance for that compiler.
683
- # define BOOST_IMPORT_TEMPLATE4(template_name) \
684
- template <class T, class U, class V, class W, class B = ::boost::detail::empty_base<T> > \
685
- struct template_name : ::template_name<T, U, V, W, B> {};
686
-
687
- # define BOOST_IMPORT_TEMPLATE3(template_name) \
688
- template <class T, class U, class V, class B = ::boost::detail::empty_base<T> > \
689
- struct template_name : ::template_name<T, U, V, B> {};
690
-
691
- # define BOOST_IMPORT_TEMPLATE2(template_name) \
692
- template <class T, class U, class B = ::boost::detail::empty_base<T> > \
693
- struct template_name : ::template_name<T, U, B> {};
694
-
695
- # define BOOST_IMPORT_TEMPLATE1(template_name) \
696
- template <class T, class B = ::boost::detail::empty_base<T> > \
697
- struct template_name : ::template_name<T, B> {};
653
+ // Here's where we put it all together, defining the xxxx forms of the templates.
654
+ // We also define specializations of is_chained_base<> for
655
+ // the xxxx, xxxx1, and xxxx2 templates.
656
+ //
698
657
 
699
- # endif // BOOST_NO_USING_TEMPLATE
658
+ namespace operators_detail
659
+ {
700
660
 
701
- #endif // BOOST_NO_OPERATORS_IN_NAMESPACE
661
+ // A type parameter is used instead of a plain bool because Borland's compiler
662
+ // didn't cope well with the more obvious non-type template parameter.
663
+ struct true_t {};
664
+ struct false_t {};
702
665
 
703
- //
704
- // Here's where we put it all together, defining the xxxx forms of the templates
705
- // in namespace boost. We also define specializations of is_chained_base<> for
706
- // the xxxx, xxxx1, and xxxx2 templates, importing them into boost:: as
707
- // necessary.
708
- //
666
+ } // namespace operators_detail
709
667
 
710
668
  // is_chained_base<> - a traits class used to distinguish whether an operator
711
669
  // template argument is being used for base class chaining, or is specifying a
712
670
  // 2nd argument type.
713
671
 
714
- namespace boost {
715
- // A type parameter is used instead of a plain bool because Borland's compiler
716
- // didn't cope well with the more obvious non-type template parameter.
717
- namespace detail {
718
- struct true_t {};
719
- struct false_t {};
720
- } // namespace detail
721
-
722
672
  // Unspecialized version assumes that most types are not being used for base
723
673
  // class chaining. We specialize for the operator templates defined in this
724
674
  // library.
725
675
  template<class T> struct is_chained_base {
726
- typedef ::boost::detail::false_t value;
676
+ typedef operators_detail::false_t value;
727
677
  };
728
678
 
729
- } // namespace boost
730
-
731
- // Import a 4-type-argument operator template into boost (if necessary) and
732
- // provide a specialization of 'is_chained_base<>' for it.
733
- # define BOOST_OPERATOR_TEMPLATE4(template_name4) \
734
- BOOST_IMPORT_TEMPLATE4(template_name4) \
735
- template<class T, class U, class V, class W, class B> \
736
- struct is_chained_base< ::boost::template_name4<T, U, V, W, B> > { \
737
- typedef ::boost::detail::true_t value; \
679
+ // Provide a specialization of 'is_chained_base<>'
680
+ // for a 4-type-argument operator template.
681
+ # define BOOST_OPERATOR_TEMPLATE4(template_name4) \
682
+ template<class T, class U, class V, class W, class B> \
683
+ struct is_chained_base< template_name4<T, U, V, W, B> > { \
684
+ typedef operators_detail::true_t value; \
738
685
  };
739
686
 
740
- // Import a 3-type-argument operator template into boost (if necessary) and
741
- // provide a specialization of 'is_chained_base<>' for it.
742
- # define BOOST_OPERATOR_TEMPLATE3(template_name3) \
743
- BOOST_IMPORT_TEMPLATE3(template_name3) \
744
- template<class T, class U, class V, class B> \
745
- struct is_chained_base< ::boost::template_name3<T, U, V, B> > { \
746
- typedef ::boost::detail::true_t value; \
687
+ // Provide a specialization of 'is_chained_base<>'
688
+ // for a 3-type-argument operator template.
689
+ # define BOOST_OPERATOR_TEMPLATE3(template_name3) \
690
+ template<class T, class U, class V, class B> \
691
+ struct is_chained_base< template_name3<T, U, V, B> > { \
692
+ typedef operators_detail::true_t value; \
747
693
  };
748
694
 
749
- // Import a 2-type-argument operator template into boost (if necessary) and
750
- // provide a specialization of 'is_chained_base<>' for it.
751
- # define BOOST_OPERATOR_TEMPLATE2(template_name2) \
752
- BOOST_IMPORT_TEMPLATE2(template_name2) \
753
- template<class T, class U, class B> \
754
- struct is_chained_base< ::boost::template_name2<T, U, B> > { \
755
- typedef ::boost::detail::true_t value; \
695
+ // Provide a specialization of 'is_chained_base<>'
696
+ // for a 2-type-argument operator template.
697
+ # define BOOST_OPERATOR_TEMPLATE2(template_name2) \
698
+ template<class T, class U, class B> \
699
+ struct is_chained_base< template_name2<T, U, B> > { \
700
+ typedef operators_detail::true_t value; \
756
701
  };
757
702
 
758
- // Import a 1-type-argument operator template into boost (if necessary) and
759
- // provide a specialization of 'is_chained_base<>' for it.
760
- # define BOOST_OPERATOR_TEMPLATE1(template_name1) \
761
- BOOST_IMPORT_TEMPLATE1(template_name1) \
762
- template<class T, class B> \
763
- struct is_chained_base< ::boost::template_name1<T, B> > { \
764
- typedef ::boost::detail::true_t value; \
703
+ // Provide a specialization of 'is_chained_base<>'
704
+ // for a 1-type-argument operator template.
705
+ # define BOOST_OPERATOR_TEMPLATE1(template_name1) \
706
+ template<class T, class B> \
707
+ struct is_chained_base< template_name1<T, B> > { \
708
+ typedef operators_detail::true_t value; \
765
709
  };
766
710
 
767
711
  // BOOST_OPERATOR_TEMPLATE(template_name) defines template_name<> such that it
@@ -778,34 +722,34 @@ template<class T> struct is_chained_base {
778
722
  // implementation in terms of either '<template_name>1' or '<template_name>2'.
779
723
  //
780
724
 
781
- # define BOOST_OPERATOR_TEMPLATE(template_name) \
782
- template <class T \
783
- ,class U = T \
784
- ,class B = ::boost::detail::empty_base<T> \
785
- ,class O = typename is_chained_base<U>::value \
786
- > \
787
- struct template_name : template_name##2<T, U, B> {}; \
788
- \
789
- template<class T, class U, class B> \
790
- struct template_name<T, U, B, ::boost::detail::true_t> \
791
- : template_name##1<T, U> {}; \
792
- \
793
- template <class T, class B> \
794
- struct template_name<T, T, B, ::boost::detail::false_t> \
795
- : template_name##1<T, B> {}; \
796
- \
797
- template<class T, class U, class B, class O> \
798
- struct is_chained_base< ::boost::template_name<T, U, B, O> > { \
799
- typedef ::boost::detail::true_t value; \
800
- }; \
801
- \
802
- BOOST_OPERATOR_TEMPLATE2(template_name##2) \
725
+ # define BOOST_OPERATOR_TEMPLATE(template_name) \
726
+ template <class T \
727
+ ,class U = T \
728
+ ,class B = operators_detail::empty_base<T> \
729
+ ,class O = typename is_chained_base<U>::value \
730
+ > \
731
+ struct template_name; \
732
+ \
733
+ template<class T, class U, class B> \
734
+ struct template_name<T, U, B, operators_detail::false_t> \
735
+ : template_name##2<T, U, B> {}; \
736
+ \
737
+ template<class T, class U> \
738
+ struct template_name<T, U, operators_detail::empty_base<T>, operators_detail::true_t> \
739
+ : template_name##1<T, U> {}; \
740
+ \
741
+ template <class T, class B> \
742
+ struct template_name<T, T, B, operators_detail::false_t> \
743
+ : template_name##1<T, B> {}; \
744
+ \
745
+ template<class T, class U, class B, class O> \
746
+ struct is_chained_base< template_name<T, U, B, O> > { \
747
+ typedef operators_detail::true_t value; \
748
+ }; \
749
+ \
750
+ BOOST_OPERATOR_TEMPLATE2(template_name##2) \
803
751
  BOOST_OPERATOR_TEMPLATE1(template_name##1)
804
752
 
805
-
806
-
807
- namespace boost {
808
-
809
753
  BOOST_OPERATOR_TEMPLATE(less_than_comparable)
810
754
  BOOST_OPERATOR_TEMPLATE(equality_comparable)
811
755
  BOOST_OPERATOR_TEMPLATE(multipliable)
@@ -859,13 +803,7 @@ BOOST_OPERATOR_TEMPLATE4(random_access_iteratable)
859
803
  #undef BOOST_OPERATOR_TEMPLATE3
860
804
  #undef BOOST_OPERATOR_TEMPLATE2
861
805
  #undef BOOST_OPERATOR_TEMPLATE1
862
- #undef BOOST_IMPORT_TEMPLATE1
863
- #undef BOOST_IMPORT_TEMPLATE2
864
- #undef BOOST_IMPORT_TEMPLATE3
865
- #undef BOOST_IMPORT_TEMPLATE4
866
806
 
867
- // The following 'operators' classes can only be used portably if the derived class
868
- // declares ALL of the required member operators.
869
807
  template <class T, class U>
870
808
  struct operators2
871
809
  : totally_ordered2<T,U
@@ -927,7 +865,7 @@ struct bidirectional_iterator_helper
927
865
  > > {};
928
866
 
929
867
  template <class T,
930
- class V,
868
+ class V,
931
869
  class D = std::ptrdiff_t,
932
870
  class P = V*,
933
871
  class R = V&>
@@ -941,10 +879,14 @@ struct random_access_iterator_helper
941
879
  }
942
880
  }; // random_access_iterator_helper
943
881
 
882
+ } // namespace operators_impl
883
+ using namespace operators_impl;
884
+
944
885
  } // namespace boost
945
886
 
946
887
  #if defined(__sgi) && !defined(__GNUC__)
947
888
  #pragma reset woff 1234
948
889
  #endif
949
890
 
891
+ #endif // BOOST_NO_OPERATORS_IN_NAMESPACE
950
892
  #endif // BOOST_OPERATORS_HPP