passenger 4.0.20 → 4.0.21
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- checksums.yaml +8 -8
- checksums.yaml.gz.asc +7 -7
- data.tar.gz.asc +7 -7
- data/.gitignore +1 -0
- data/.travis.yml +1 -1
- data/NEWS +15 -0
- data/README.md +5 -3
- data/Rakefile +1 -0
- data/bin/passenger-config +1 -5
- data/bin/passenger-install-apache2-module +53 -5
- data/bin/passenger-install-nginx-module +19 -6
- data/bin/passenger-memory-stats +3 -3
- data/build/agents.rb +11 -8
- data/build/apache2.rb +9 -5
- data/build/basics.rb +15 -21
- data/build/common_library.rb +16 -6
- data/build/cplusplus_support.rb +5 -5
- data/build/cxx_tests.rb +3 -3
- data/build/documentation.rb +1 -1
- data/build/misc.rb +4 -37
- data/build/node_tests.rb +29 -0
- data/build/oxt_tests.rb +1 -1
- data/build/packaging.rb +29 -10
- data/build/preprocessor.rb +2 -1
- data/build/test_basics.rb +15 -6
- data/debian.template/locations.ini.template +1 -0
- data/debian.template/passenger.install.template +1 -0
- data/dev/copy_boost_headers.rb +7 -3
- data/dev/run_travis.sh +32 -16
- data/doc/Users guide Apache.idmap.txt +22 -34
- data/doc/Users guide Apache.txt +20 -234
- data/doc/Users guide Nginx.idmap.txt +84 -66
- data/doc/Users guide Nginx.txt +50 -1
- data/doc/Users guide Standalone.idmap.txt +74 -0
- data/doc/Users guide Standalone.txt +22 -9
- data/doc/Users guide.txt +51 -0
- data/doc/users_guide_snippets/environment_variables.txt +0 -3
- data/doc/users_guide_snippets/installation.txt +337 -380
- data/doc/users_guide_snippets/installation/run_installer.txt +58 -0
- data/doc/users_guide_snippets/installation/verify_running_epilogue.txt +6 -0
- data/doc/users_guide_snippets/support_information.txt +2 -9
- data/doc/users_guide_snippets/troubleshooting/default.txt +112 -0
- data/doc/users_guide_snippets/troubleshooting/rails.txt +56 -0
- data/doc/users_guide_snippets/where_to_get_support.txt +9 -0
- data/ext/apache2/Bucket.h +1 -1
- data/ext/apache2/Configuration.hpp +0 -44
- data/ext/apache2/CreateDirConfig.cpp +1 -1
- data/ext/apache2/CreateDirConfig.cpp.erb +1 -1
- data/ext/apache2/Hooks.cpp +28 -21
- data/ext/apache2/MergeDirConfig.cpp +1 -0
- data/ext/apache2/MergeDirConfig.cpp.erb +1 -1
- data/ext/apache2/SetHeaders.cpp +73 -0
- data/ext/apache2/SetHeaders.cpp.erb +88 -0
- data/ext/boost/algorithm/string/detail/find_format.hpp +5 -5
- data/ext/boost/algorithm/string/detail/find_format_all.hpp +5 -5
- data/ext/boost/algorithm/string/detail/finder.hpp +1 -1
- data/ext/boost/algorithm/string/formatter.hpp +2 -2
- data/ext/boost/assert.hpp +6 -1
- data/ext/boost/atomic.hpp +18 -0
- data/ext/boost/atomic/atomic.hpp +241 -0
- data/ext/boost/atomic/detail/base.hpp +585 -0
- data/ext/boost/atomic/detail/cas32strong.hpp +885 -0
- data/ext/boost/atomic/detail/cas32weak.hpp +947 -0
- data/ext/boost/atomic/detail/cas64strong.hpp +443 -0
- data/ext/boost/atomic/detail/config.hpp +54 -0
- data/ext/boost/atomic/detail/gcc-alpha.hpp +368 -0
- data/ext/boost/atomic/detail/gcc-armv6plus.hpp +252 -0
- data/ext/boost/atomic/detail/gcc-cas.hpp +157 -0
- data/ext/boost/atomic/detail/gcc-ppc.hpp +2850 -0
- data/ext/boost/atomic/detail/gcc-sparcv9.hpp +1259 -0
- data/ext/boost/atomic/detail/gcc-x86.hpp +1766 -0
- data/ext/boost/atomic/detail/generic-cas.hpp +206 -0
- data/ext/boost/atomic/detail/interlocked.hpp +200 -0
- data/ext/boost/atomic/detail/linux-arm.hpp +189 -0
- data/ext/boost/atomic/detail/lockpool.hpp +97 -0
- data/ext/boost/atomic/detail/platform.hpp +62 -0
- data/ext/boost/atomic/detail/type-classification.hpp +45 -0
- data/ext/boost/chrono/config.hpp +8 -3
- data/ext/boost/chrono/duration.hpp +9 -10
- data/ext/boost/chrono/system_clocks.hpp +1 -1
- data/ext/boost/chrono/time_point.hpp +4 -3
- data/ext/boost/config/auto_link.hpp +53 -52
- data/ext/boost/config/compiler/borland.hpp +1 -0
- data/ext/boost/config/compiler/clang.hpp +24 -1
- data/ext/boost/config/compiler/codegear.hpp +1 -0
- data/ext/boost/config/compiler/common_edg.hpp +1 -0
- data/ext/boost/config/compiler/cray.hpp +1 -0
- data/ext/boost/config/compiler/digitalmars.hpp +1 -0
- data/ext/boost/config/compiler/gcc.hpp +29 -3
- data/ext/boost/config/compiler/gcc_xml.hpp +2 -1
- data/ext/boost/config/compiler/hp_acc.hpp +1 -0
- data/ext/boost/config/compiler/intel.hpp +1 -1
- data/ext/boost/config/compiler/metrowerks.hpp +1 -0
- data/ext/boost/config/compiler/mpw.hpp +1 -0
- data/ext/boost/config/compiler/pathscale.hpp +1 -0
- data/ext/boost/config/compiler/pgi.hpp +1 -0
- data/ext/boost/config/compiler/sunpro_cc.hpp +1 -0
- data/ext/boost/config/compiler/vacpp.hpp +3 -2
- data/ext/boost/config/compiler/visualc.hpp +25 -11
- data/ext/boost/config/platform/vxworks.hpp +353 -15
- data/ext/boost/config/select_compiler_config.hpp +4 -4
- data/ext/boost/config/stdlib/dinkumware.hpp +10 -3
- data/ext/boost/config/stdlib/libstdcpp3.hpp +2 -1
- data/ext/boost/config/suffix.hpp +45 -19
- data/ext/boost/date_time/format_date_parser.hpp +1 -11
- data/ext/boost/date_time/strings_from_facet.hpp +5 -3
- data/ext/boost/detail/atomic_redef_macros.hpp +19 -0
- data/ext/boost/detail/atomic_undef_macros.hpp +39 -0
- data/ext/boost/detail/endian.hpp +52 -4
- data/ext/boost/detail/scoped_enum_emulation.hpp +10 -10
- data/ext/boost/detail/select_type.hpp +36 -0
- data/ext/boost/exception/current_exception_cast.hpp +1 -1
- data/ext/boost/exception/detail/error_info_impl.hpp +3 -5
- data/ext/boost/exception/detail/exception_ptr.hpp +3 -3
- data/ext/boost/exception/detail/is_output_streamable.hpp +1 -1
- data/ext/boost/exception/detail/object_hex_dump.hpp +1 -1
- data/ext/boost/exception/detail/type_info.hpp +1 -1
- data/ext/boost/exception/diagnostic_information.hpp +15 -14
- data/ext/boost/exception/exception.hpp +1 -1
- data/ext/boost/exception/get_error_info.hpp +1 -1
- data/ext/boost/exception/info.hpp +12 -13
- data/ext/boost/exception/to_string.hpp +6 -1
- data/ext/boost/exception/to_string_stub.hpp +9 -1
- data/ext/boost/foreach.hpp +5 -5
- data/ext/boost/function/function_template.hpp +6 -6
- data/ext/boost/functional/hash/detail/float_functions.hpp +90 -0
- data/ext/boost/functional/hash/detail/hash_float.hpp +11 -2
- data/ext/boost/functional/hash/extensions.hpp +14 -2
- data/ext/boost/functional/hash/hash.hpp +26 -5
- data/ext/boost/get_pointer.hpp +17 -2
- data/ext/boost/integer_traits.hpp +1 -1
- data/ext/boost/lexical_cast.hpp +615 -395
- data/ext/boost/libs/atomic/lockpool.cpp +24 -0
- data/ext/boost/libs/system/src/error_code.cpp +25 -18
- data/ext/boost/libs/thread/src/future.cpp +7 -5
- data/ext/boost/libs/thread/src/pthread/once.cpp +9 -3
- data/ext/boost/libs/thread/src/pthread/once_atomic.cpp +90 -0
- data/ext/boost/libs/thread/src/pthread/thread.cpp +129 -95
- data/ext/boost/libs/thread/src/pthread/timeconv.inl +20 -1
- data/ext/boost/limits.hpp +1 -1
- data/ext/boost/math/policies/policy.hpp +10 -0
- data/ext/boost/math/special_functions/detail/round_fwd.hpp +17 -4
- data/ext/boost/math/special_functions/fpclassify.hpp +114 -45
- data/ext/boost/math/special_functions/math_fwd.hpp +195 -83
- data/ext/boost/math/special_functions/sign.hpp +13 -8
- data/ext/boost/math/tools/config.hpp +38 -16
- data/ext/boost/move/algorithm.hpp +275 -0
- data/ext/boost/move/core.hpp +332 -0
- data/ext/boost/move/detail/config_begin.hpp +23 -0
- data/ext/boost/move/detail/config_end.hpp +20 -0
- data/ext/boost/move/detail/meta_utils.hpp +158 -0
- data/ext/boost/move/iterator.hpp +298 -0
- data/ext/boost/move/move.hpp +10 -1256
- data/ext/boost/move/traits.hpp +142 -0
- data/ext/boost/move/utility.hpp +194 -0
- data/ext/boost/mpl/assert.hpp +72 -4
- data/ext/boost/noncopyable.hpp +15 -3
- data/ext/boost/pointer_to_other.hpp +55 -0
- data/ext/boost/range/concepts.hpp +4 -4
- data/ext/boost/range/detail/extract_optional_type.hpp +1 -1
- data/ext/boost/range/empty.hpp +1 -1
- data/ext/boost/range/iterator_range_core.hpp +4 -1
- data/ext/boost/range/iterator_range_io.hpp +2 -2
- data/ext/boost/ratio/config.hpp +6 -0
- data/ext/boost/ratio/detail/overflow_helpers.hpp +2 -2
- data/ext/boost/smart_ptr/allocate_shared_array.hpp +250 -0
- data/ext/boost/smart_ptr/detail/allocate_array_helper.hpp +169 -0
- data/ext/boost/smart_ptr/detail/array_deleter.hpp +124 -0
- data/ext/boost/smart_ptr/detail/array_traits.hpp +53 -0
- data/ext/boost/smart_ptr/detail/array_utility.hpp +178 -0
- data/ext/boost/smart_ptr/detail/make_array_helper.hpp +157 -0
- data/ext/boost/smart_ptr/detail/operator_bool.hpp +16 -9
- data/ext/boost/smart_ptr/detail/shared_count.hpp +78 -7
- data/ext/boost/smart_ptr/detail/sp_convertible.hpp +15 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +12 -6
- data/ext/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_aix.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_nt.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_pt.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +162 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_sync.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_impl.hpp +15 -0
- data/ext/boost/smart_ptr/detail/sp_forward.hpp +39 -0
- data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +19 -3
- data/ext/boost/smart_ptr/detail/sp_if_array.hpp +31 -0
- data/ext/boost/smart_ptr/detail/sp_nullptr_t.hpp +45 -0
- data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +5 -12
- data/ext/boost/smart_ptr/enable_shared_from_this.hpp +4 -4
- data/ext/boost/smart_ptr/make_shared.hpp +5 -1060
- data/ext/boost/smart_ptr/make_shared_array.hpp +247 -0
- data/ext/boost/smart_ptr/make_shared_object.hpp +1128 -0
- data/ext/boost/smart_ptr/scoped_array.hpp +32 -7
- data/ext/boost/smart_ptr/scoped_ptr.hpp +31 -5
- data/ext/boost/smart_ptr/shared_array.hpp +135 -20
- data/ext/boost/smart_ptr/shared_ptr.hpp +444 -126
- data/ext/boost/smart_ptr/weak_ptr.hpp +39 -28
- data/ext/boost/static_assert.hpp +74 -17
- data/ext/boost/system/error_code.hpp +76 -68
- data/ext/boost/system/system_error.hpp +5 -1
- data/ext/boost/thread/barrier.hpp +6 -2
- data/ext/boost/thread/completion_latch.hpp +233 -0
- data/ext/boost/thread/condition.hpp +6 -1
- data/ext/boost/thread/detail/async_func.hpp +571 -0
- data/ext/boost/thread/detail/config.hpp +248 -40
- data/ext/boost/thread/detail/counter.hpp +93 -0
- data/ext/boost/thread/detail/delete.hpp +12 -0
- data/ext/boost/thread/detail/invoke.hpp +1351 -0
- data/ext/boost/thread/detail/is_convertible.hpp +48 -0
- data/ext/boost/thread/detail/lockable_wrapper.hpp +45 -0
- data/ext/boost/thread/detail/log.hpp +83 -0
- data/ext/boost/thread/detail/make_tuple_indices.hpp +224 -0
- data/ext/boost/thread/detail/move.hpp +32 -16
- data/ext/boost/thread/detail/thread.hpp +236 -41
- data/ext/boost/thread/detail/thread_group.hpp +55 -9
- data/ext/boost/thread/detail/thread_interruption.hpp +4 -1
- data/ext/boost/thread/exceptions.hpp +2 -0
- data/ext/boost/thread/externally_locked.hpp +351 -0
- data/ext/boost/thread/externally_locked_stream.hpp +170 -0
- data/ext/boost/thread/future.hpp +2517 -455
- data/ext/boost/thread/future_error_code.hpp +61 -0
- data/ext/boost/thread/is_locked_by_this_thread.hpp +39 -0
- data/ext/boost/thread/latch.hpp +142 -0
- data/ext/boost/thread/lock_algorithms.hpp +468 -0
- data/ext/boost/thread/lock_concepts.hpp +197 -0
- data/ext/boost/thread/lock_factories.hpp +78 -0
- data/ext/boost/thread/lock_guard.hpp +88 -0
- data/ext/boost/thread/lock_options.hpp +31 -0
- data/ext/boost/thread/lock_traits.hpp +45 -0
- data/ext/boost/thread/lock_types.hpp +1226 -0
- data/ext/boost/thread/lockable_adapter.hpp +226 -0
- data/ext/boost/thread/lockable_concepts.hpp +157 -0
- data/ext/boost/thread/lockable_traits.hpp +207 -0
- data/ext/boost/thread/locks.hpp +5 -1816
- data/ext/boost/thread/mutex.hpp +33 -1
- data/ext/boost/thread/null_mutex.hpp +243 -0
- data/ext/boost/thread/once.hpp +10 -1
- data/ext/boost/thread/poly_lockable.hpp +68 -0
- data/ext/boost/thread/poly_lockable_adapter.hpp +89 -0
- data/ext/boost/thread/poly_shared_lockable.hpp +135 -0
- data/ext/boost/thread/poly_shared_lockable_adapter.hpp +170 -0
- data/ext/boost/thread/pthread/condition_variable.hpp +74 -26
- data/ext/boost/thread/pthread/condition_variable_fwd.hpp +54 -27
- data/ext/boost/thread/pthread/mutex.hpp +101 -38
- data/ext/boost/thread/pthread/once.hpp +459 -44
- data/ext/boost/thread/pthread/once_atomic.hpp +313 -0
- data/ext/boost/thread/pthread/recursive_mutex.hpp +19 -10
- data/ext/boost/thread/pthread/shared_mutex.hpp +226 -61
- data/ext/boost/thread/pthread/shared_mutex_assert.hpp +724 -0
- data/ext/boost/thread/pthread/thread_data.hpp +53 -50
- data/ext/boost/thread/pthread/timespec.hpp +96 -12
- data/ext/boost/thread/recursive_mutex.hpp +44 -1
- data/ext/boost/thread/reverse_lock.hpp +3 -2
- data/ext/boost/thread/scoped_thread.hpp +285 -0
- data/ext/boost/thread/shared_lock_guard.hpp +2 -1
- data/ext/boost/thread/shared_mutex.hpp +23 -0
- data/ext/boost/thread/strict_lock.hpp +235 -0
- data/ext/boost/thread/sync_bounded_queue.hpp +594 -0
- data/ext/boost/thread/sync_queue.hpp +516 -0
- data/ext/boost/thread/synchronized_value.hpp +1001 -0
- data/ext/boost/thread/testable_mutex.hpp +148 -0
- data/ext/boost/thread/thread.hpp +1 -13
- data/ext/boost/thread/thread_functors.hpp +57 -0
- data/ext/boost/thread/thread_guard.hpp +46 -0
- data/ext/boost/thread/thread_only.hpp +29 -0
- data/ext/boost/thread/v2/shared_mutex.hpp +1062 -0
- data/ext/boost/thread/v2/thread.hpp +37 -10
- data/ext/boost/thread/xtime.hpp +2 -1
- data/ext/boost/token_functions.hpp +16 -16
- data/ext/boost/type_traits/add_lvalue_reference.hpp +26 -0
- data/ext/boost/type_traits/add_reference.hpp +1 -1
- data/ext/boost/type_traits/add_rvalue_reference.hpp +4 -4
- data/ext/boost/type_traits/aligned_storage.hpp +13 -0
- data/ext/boost/type_traits/common_type.hpp +11 -12
- data/ext/boost/type_traits/config.hpp +1 -1
- data/ext/boost/type_traits/detail/common_type_imp.hpp +1 -1
- data/ext/boost/type_traits/detail/has_binary_operator.hpp +1 -1
- data/ext/boost/type_traits/detail/is_function_ptr_tester.hpp +1 -1
- data/ext/boost/type_traits/has_left_shift.hpp +49 -0
- data/ext/boost/type_traits/has_right_shift.hpp +49 -0
- data/ext/boost/type_traits/has_trivial_move_assign.hpp +57 -0
- data/ext/boost/type_traits/has_trivial_move_constructor.hpp +57 -0
- data/ext/boost/type_traits/intrinsics.hpp +18 -2
- data/ext/boost/type_traits/is_abstract.hpp +1 -1
- data/ext/boost/type_traits/is_array.hpp +1 -1
- data/ext/boost/type_traits/is_const.hpp +1 -1
- data/ext/boost/type_traits/is_convertible.hpp +78 -17
- data/ext/boost/type_traits/is_function.hpp +6 -1
- data/ext/boost/type_traits/is_integral.hpp +6 -1
- data/ext/boost/type_traits/is_nothrow_move_assignable.hpp +84 -0
- data/ext/boost/type_traits/is_nothrow_move_constructible.hpp +84 -0
- data/ext/boost/type_traits/is_pod.hpp +3 -1
- data/ext/boost/type_traits/is_rvalue_reference.hpp +1 -1
- data/ext/boost/type_traits/is_volatile.hpp +1 -1
- data/ext/boost/type_traits/make_signed.hpp +153 -0
- data/ext/boost/type_traits/make_unsigned.hpp +16 -0
- data/ext/boost/type_traits/remove_const.hpp +1 -1
- data/ext/boost/type_traits/remove_cv.hpp +1 -1
- data/ext/boost/type_traits/remove_reference.hpp +1 -1
- data/ext/boost/type_traits/remove_volatile.hpp +1 -1
- data/ext/boost/unordered/detail/allocate.hpp +1120 -0
- data/ext/boost/unordered/detail/buckets.hpp +876 -0
- data/ext/boost/unordered/detail/equivalent.hpp +680 -0
- data/ext/boost/unordered/detail/extract_key.hpp +183 -0
- data/ext/boost/unordered/detail/fwd.hpp +23 -0
- data/ext/boost/unordered/detail/table.hpp +861 -0
- data/ext/boost/unordered/detail/unique.hpp +622 -0
- data/ext/boost/unordered/detail/util.hpp +260 -0
- data/ext/boost/unordered/unordered_map.hpp +1652 -0
- data/ext/boost/unordered/unordered_map_fwd.hpp +65 -0
- data/ext/boost/unordered/unordered_set.hpp +1549 -0
- data/ext/boost/unordered/unordered_set_fwd.hpp +63 -0
- data/ext/boost/unordered_map.hpp +18 -0
- data/ext/boost/unordered_set.hpp +18 -0
- data/ext/boost/utility/addressof.hpp +2 -2
- data/ext/boost/utility/result_of.hpp +8 -1
- data/ext/boost/version.hpp +2 -2
- data/ext/common/Account.h +1 -1
- data/ext/common/AccountsDatabase.h +1 -1
- data/ext/common/AgentsStarter.cpp +3 -1
- data/ext/common/AgentsStarter.h +2 -2
- data/ext/common/ApplicationPool2/AppTypes.cpp +24 -6
- data/ext/common/ApplicationPool2/AppTypes.h +17 -8
- data/ext/common/ApplicationPool2/Common.h +12 -12
- data/ext/common/ApplicationPool2/DirectSpawner.h +2 -2
- data/ext/common/ApplicationPool2/DummySpawner.h +3 -3
- data/ext/common/ApplicationPool2/Group.h +6 -6
- data/ext/common/ApplicationPool2/Implementation.cpp +19 -19
- data/ext/common/ApplicationPool2/PipeWatcher.h +5 -5
- data/ext/common/ApplicationPool2/Pool.h +21 -21
- data/ext/common/ApplicationPool2/Process.h +6 -6
- data/ext/common/ApplicationPool2/Session.h +1 -1
- data/ext/common/ApplicationPool2/SmartSpawner.h +24 -12
- data/ext/common/ApplicationPool2/Socket.h +2 -2
- data/ext/common/ApplicationPool2/Spawner.h +64 -14
- data/ext/common/ApplicationPool2/SpawnerFactory.h +7 -7
- data/ext/common/ApplicationPool2/SuperGroup.h +5 -5
- data/ext/common/BackgroundEventLoop.cpp +4 -4
- data/ext/common/BackgroundEventLoop.h +1 -1
- data/ext/common/Constants.h +13 -1
- data/ext/common/EventedBufferedInput.h +8 -8
- data/ext/common/Exceptions.cpp +71 -0
- data/ext/common/Exceptions.h +60 -7
- data/ext/common/FileDescriptor.h +4 -4
- data/ext/common/MessageClient.h +1 -1
- data/ext/common/MessageServer.h +5 -5
- data/ext/common/MultiLibeio.cpp +3 -3
- data/ext/common/MultiLibeio.h +2 -2
- data/ext/common/RandomGenerator.h +11 -11
- data/ext/common/ResourceLocator.h +8 -1
- data/ext/common/SafeLibev.h +12 -12
- data/ext/common/ServerInstanceDir.h +11 -3
- data/ext/common/UnionStation.h +10 -10
- data/ext/common/Utils.cpp +11 -13
- data/ext/common/Utils.h +9 -9
- data/ext/common/Utils/BlockingQueue.h +10 -10
- data/ext/common/Utils/BufferedIO.h +1 -1
- data/ext/common/Utils/CachedFileStat.hpp +2 -2
- data/ext/common/Utils/FileChangeChecker.h +1 -1
- data/ext/common/Utils/HashMap.h +13 -4
- data/ext/common/Utils/IOUtils.cpp +33 -10
- data/ext/common/Utils/IniFile.h +3 -3
- data/ext/common/Utils/Lock.h +2 -2
- data/ext/common/Utils/MessagePassing.h +10 -10
- data/ext/common/Utils/ProcessMetricsCollector.h +24 -6
- data/ext/common/Utils/ScopeGuard.h +5 -5
- data/ext/common/Utils/jsoncpp.cpp +2 -0
- data/ext/common/agents/HelperAgent/FileBackedPipe.h +26 -26
- data/ext/common/agents/HelperAgent/Main.cpp +18 -18
- data/ext/common/agents/HelperAgent/RequestHandler.cpp +4 -4
- data/ext/common/agents/HelperAgent/RequestHandler.h +30 -21
- data/ext/common/agents/LoggingAgent/AdminController.h +1 -1
- data/ext/common/agents/LoggingAgent/FilterSupport.h +13 -11
- data/ext/common/agents/LoggingAgent/LoggingServer.h +11 -11
- data/ext/common/agents/LoggingAgent/Main.cpp +9 -9
- data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
- data/ext/common/agents/SpawnPreparer.cpp +1 -0
- data/ext/common/agents/Watchdog/AgentWatcher.cpp +8 -7
- data/ext/common/agents/Watchdog/Main.cpp +81 -73
- data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +1 -1
- data/ext/libev/Changes +57 -0
- data/ext/libev/LICENSE +2 -1
- data/ext/libev/Makefile.in +110 -50
- data/ext/libev/README +8 -8
- data/ext/libev/aclocal.m4 +1503 -861
- data/ext/libev/config.guess +290 -304
- data/ext/libev/config.sub +77 -198
- data/ext/libev/configure +1735 -890
- data/ext/libev/configure.ac +3 -2
- data/ext/libev/ev++.h +6 -6
- data/ext/libev/ev.c +541 -214
- data/ext/libev/ev.h +106 -100
- data/ext/libev/ev_epoll.c +1 -1
- data/ext/libev/ev_kqueue.c +20 -4
- data/ext/libev/ev_vars.h +15 -16
- data/ext/libev/ev_win32.c +12 -2
- data/ext/libev/ev_wrap.h +162 -160
- data/ext/libev/event.c +29 -6
- data/ext/libev/event.h +9 -2
- data/ext/libev/ltmain.sh +2632 -1384
- data/ext/nginx/ConfigurationCommands.c +1 -1
- data/ext/nginx/ConfigurationCommands.c.erb +3 -1
- data/ext/nginx/ContentHandler.c +25 -2
- data/ext/nginx/CreateLocationConfig.c +1 -0
- data/ext/nginx/CreateLocationConfig.c.erb +1 -1
- data/ext/nginx/MergeLocationConfig.c +1 -0
- data/ext/nginx/MergeLocationConfig.c.erb +1 -1
- data/ext/nginx/config +12 -0
- data/ext/oxt/dynamic_thread_group.hpp +7 -4
- data/ext/oxt/system_calls.cpp +5 -1
- data/ext/oxt/system_calls.hpp +3 -0
- data/helper-scripts/node-loader.js +117 -249
- data/lib/phusion_passenger.rb +27 -5
- data/lib/phusion_passenger/abstract_installer.rb +104 -9
- data/lib/phusion_passenger/admin_tools/memory_stats.rb +10 -9
- data/lib/phusion_passenger/apache2/config_options.rb +6 -3
- data/lib/phusion_passenger/common_library.rb +7 -1
- data/lib/phusion_passenger/constants.rb +6 -0
- data/lib/phusion_passenger/loader_shared_helpers.rb +7 -4
- data/lib/phusion_passenger/nginx/config_options.rb +2 -1
- data/lib/phusion_passenger/packaging.rb +3 -0
- data/lib/phusion_passenger/platform_info/apache.rb +43 -6
- data/lib/phusion_passenger/platform_info/apache_detector.rb +15 -5
- data/lib/phusion_passenger/platform_info/compiler.rb +167 -32
- data/lib/phusion_passenger/platform_info/cxx_portability.rb +133 -77
- data/lib/phusion_passenger/platform_info/depcheck.rb +17 -7
- data/lib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +3 -3
- data/lib/phusion_passenger/platform_info/depcheck_specs/compiler_toolchain.rb +4 -4
- data/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +5 -6
- data/lib/phusion_passenger/platform_info/linux.rb +2 -1
- data/lib/phusion_passenger/platform_info/operating_system.rb +1 -1
- data/lib/phusion_passenger/platform_info/ruby.rb +18 -3
- data/lib/phusion_passenger/standalone/runtime_installer.rb +6 -2
- data/lib/phusion_passenger/standalone/start_command.rb +8 -2
- data/lib/phusion_passenger/utils/ansi_colors.rb +9 -0
- data/lib/phusion_passenger/utils/hosts_file_parser.rb +4 -2
- data/node_lib/phusion_passenger/httplib_emulation.js +141 -0
- data/node_lib/phusion_passenger/line_reader.js +154 -0
- data/node_lib/phusion_passenger/request_handler.js +65 -0
- data/node_lib/phusion_passenger/session_protocol_parser.js +113 -0
- data/resources/templates/apache2/deployment_example.txt.erb +2 -1
- data/resources/templates/apache2/installing_against_a_different_apache.txt.erb +14 -0
- data/resources/templates/apache2/multiple_apache_installations_detected.txt.erb +15 -0
- data/resources/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
- data/resources/templates/general_error_with_html.html.template +1 -1
- data/resources/templates/installer_common/gem_install_permission_problems.txt.erb +17 -0
- data/resources/templates/installer_common/low_amount_of_memory_warning.txt.erb +6 -4
- data/resources/templates/installer_common/world_inaccessible_directories.txt.erb +16 -0
- data/resources/templates/nginx/deployment_example.txt.erb +2 -1
- data/resources/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
- data/resources/templates/standalone/config.erb +1 -0
- data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +3 -3
- data/test/cxx/ApplicationPool2/PoolTest.cpp +4 -4
- data/test/cxx/ApplicationPool2/ProcessTest.cpp +5 -5
- data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +5 -5
- data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +1 -1
- data/test/cxx/EventedBufferedInputTest.cpp +6 -6
- data/test/cxx/FileBackedPipeTest.cpp +1 -1
- data/test/cxx/MessagePassingTest.cpp +1 -1
- data/test/cxx/MessageServerTest.cpp +4 -4
- data/test/cxx/RequestHandlerTest.cpp +7 -7
- data/test/cxx/UnionStationTest.cpp +2 -2
- data/test/node/line_reader_spec.js +338 -0
- data/test/node/spec_helper.js +27 -0
- data/test/ruby/standalone/runtime_installer_spec.rb +2 -1
- metadata +131 -22
- metadata.gz.asc +7 -7
- data/ext/boost/functional/hash/detail/container_fwd_0x.hpp +0 -29
- data/ext/boost/lambda/core.hpp +0 -79
- data/ext/boost/lambda/detail/actions.hpp +0 -174
- data/ext/boost/lambda/detail/arity_code.hpp +0 -110
- data/ext/boost/lambda/detail/function_adaptors.hpp +0 -789
- data/ext/boost/lambda/detail/is_instance_of.hpp +0 -104
- data/ext/boost/lambda/detail/lambda_config.hpp +0 -48
- data/ext/boost/lambda/detail/lambda_functor_base.hpp +0 -615
- data/ext/boost/lambda/detail/lambda_functors.hpp +0 -324
- data/ext/boost/lambda/detail/lambda_fwd.hpp +0 -74
- data/ext/boost/lambda/detail/lambda_traits.hpp +0 -578
- data/ext/boost/lambda/detail/member_ptr.hpp +0 -737
- data/ext/boost/lambda/detail/operator_actions.hpp +0 -139
- data/ext/boost/lambda/detail/operator_lambda_func_base.hpp +0 -271
- data/ext/boost/lambda/detail/operator_return_type_traits.hpp +0 -917
- data/ext/boost/lambda/detail/operators.hpp +0 -370
- data/ext/boost/lambda/detail/ret.hpp +0 -325
- data/ext/boost/lambda/detail/return_type_traits.hpp +0 -282
- data/ext/boost/lambda/detail/select_functions.hpp +0 -74
- data/ext/boost/lambda/lambda.hpp +0 -34
@@ -1,737 +0,0 @@
|
|
1
|
-
// Boost Lambda Library -- member_ptr.hpp ---------------------
|
2
|
-
|
3
|
-
// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
|
4
|
-
// Copyright (C) 2000 Gary Powell (gary.powell@sierra.com)
|
5
|
-
//
|
6
|
-
// Distributed under the Boost Software License, Version 1.0. (See
|
7
|
-
// accompanying file LICENSE_1_0.txt or copy at
|
8
|
-
// http://www.boost.org/LICENSE_1_0.txt)
|
9
|
-
//
|
10
|
-
// For more information, see www.boost.org
|
11
|
-
|
12
|
-
// --------------------------------------------------------------------------
|
13
|
-
|
14
|
-
#if !defined(BOOST_LAMBDA_MEMBER_PTR_HPP)
|
15
|
-
#define BOOST_LAMBDA_MEMBER_PTR_HPP
|
16
|
-
|
17
|
-
namespace boost {
|
18
|
-
namespace lambda {
|
19
|
-
|
20
|
-
|
21
|
-
class member_pointer_action {};
|
22
|
-
|
23
|
-
|
24
|
-
namespace detail {
|
25
|
-
|
26
|
-
// the boost type_traits member_pointer traits are not enough,
|
27
|
-
// need to know more details.
|
28
|
-
template<class T>
|
29
|
-
struct member_pointer {
|
30
|
-
typedef typename boost::add_reference<T>::type type;
|
31
|
-
typedef detail::unspecified class_type;
|
32
|
-
typedef detail::unspecified qualified_class_type;
|
33
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
34
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = false);
|
35
|
-
};
|
36
|
-
|
37
|
-
template<class T, class U>
|
38
|
-
struct member_pointer<T U::*> {
|
39
|
-
typedef typename boost::add_reference<T>::type type;
|
40
|
-
typedef U class_type;
|
41
|
-
typedef U qualified_class_type;
|
42
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = true);
|
43
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = false);
|
44
|
-
};
|
45
|
-
|
46
|
-
template<class T, class U>
|
47
|
-
struct member_pointer<const T U::*> {
|
48
|
-
typedef typename boost::add_reference<const T>::type type;
|
49
|
-
typedef U class_type;
|
50
|
-
typedef const U qualified_class_type;
|
51
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = true);
|
52
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = false);
|
53
|
-
};
|
54
|
-
|
55
|
-
template<class T, class U>
|
56
|
-
struct member_pointer<volatile T U::*> {
|
57
|
-
typedef typename boost::add_reference<volatile T>::type type;
|
58
|
-
typedef U class_type;
|
59
|
-
typedef volatile U qualified_class_type;
|
60
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = true);
|
61
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = false);
|
62
|
-
};
|
63
|
-
|
64
|
-
template<class T, class U>
|
65
|
-
struct member_pointer<const volatile T U::*> {
|
66
|
-
typedef typename boost::add_reference<const volatile T>::type type;
|
67
|
-
typedef U class_type;
|
68
|
-
typedef const volatile U qualified_class_type;
|
69
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = true);
|
70
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = false);
|
71
|
-
};
|
72
|
-
|
73
|
-
// -- nonconst member functions --
|
74
|
-
template<class T, class U>
|
75
|
-
struct member_pointer<T (U::*)()> {
|
76
|
-
typedef T type;
|
77
|
-
typedef U class_type;
|
78
|
-
typedef U qualified_class_type;
|
79
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
80
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
81
|
-
};
|
82
|
-
template<class T, class U, class A1>
|
83
|
-
struct member_pointer<T (U::*)(A1)> {
|
84
|
-
typedef T type;
|
85
|
-
typedef U class_type;
|
86
|
-
typedef U qualified_class_type;
|
87
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
88
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
89
|
-
};
|
90
|
-
template<class T, class U, class A1, class A2>
|
91
|
-
struct member_pointer<T (U::*)(A1, A2)> {
|
92
|
-
typedef T type;
|
93
|
-
typedef U class_type;
|
94
|
-
typedef U qualified_class_type;
|
95
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
96
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
97
|
-
};
|
98
|
-
template<class T, class U, class A1, class A2, class A3>
|
99
|
-
struct member_pointer<T (U::*)(A1, A2, A3)> {
|
100
|
-
typedef T type;
|
101
|
-
typedef U class_type;
|
102
|
-
typedef U qualified_class_type;
|
103
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
104
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
105
|
-
};
|
106
|
-
template<class T, class U, class A1, class A2, class A3, class A4>
|
107
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4)> {
|
108
|
-
typedef T type;
|
109
|
-
typedef U class_type;
|
110
|
-
typedef U qualified_class_type;
|
111
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
112
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
113
|
-
};
|
114
|
-
template<class T, class U, class A1, class A2, class A3, class A4, class A5>
|
115
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4, A5)> {
|
116
|
-
typedef T type;
|
117
|
-
typedef U class_type;
|
118
|
-
typedef U qualified_class_type;
|
119
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
120
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
121
|
-
};
|
122
|
-
template<class T, class U, class A1, class A2, class A3, class A4, class A5,
|
123
|
-
class A6>
|
124
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6)> {
|
125
|
-
typedef T type;
|
126
|
-
typedef U class_type;
|
127
|
-
typedef U qualified_class_type;
|
128
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
129
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
130
|
-
};
|
131
|
-
template<class T, class U, class A1, class A2, class A3, class A4, class A5,
|
132
|
-
class A6, class A7>
|
133
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7)> {
|
134
|
-
typedef T type;
|
135
|
-
typedef U class_type;
|
136
|
-
typedef U qualified_class_type;
|
137
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
138
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
139
|
-
};
|
140
|
-
template<class T, class U, class A1, class A2, class A3, class A4, class A5,
|
141
|
-
class A6, class A7, class A8>
|
142
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8)> {
|
143
|
-
typedef T type;
|
144
|
-
typedef U class_type;
|
145
|
-
typedef U qualified_class_type;
|
146
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
147
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
148
|
-
};
|
149
|
-
template<class T, class U, class A1, class A2, class A3, class A4, class A5,
|
150
|
-
class A6, class A7, class A8, class A9>
|
151
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9)> {
|
152
|
-
typedef T type;
|
153
|
-
typedef U class_type;
|
154
|
-
typedef U qualified_class_type;
|
155
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
156
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
157
|
-
};
|
158
|
-
// -- const member functions --
|
159
|
-
template<class T, class U>
|
160
|
-
struct member_pointer<T (U::*)() const> {
|
161
|
-
typedef T type;
|
162
|
-
typedef U class_type;
|
163
|
-
typedef const U qualified_class_type;
|
164
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
165
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
166
|
-
};
|
167
|
-
template<class T, class U, class A1>
|
168
|
-
struct member_pointer<T (U::*)(A1) const> {
|
169
|
-
typedef T type;
|
170
|
-
typedef U class_type;
|
171
|
-
typedef const U qualified_class_type;
|
172
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
173
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
174
|
-
};
|
175
|
-
template<class T, class U, class A1, class A2>
|
176
|
-
struct member_pointer<T (U::*)(A1, A2) const> {
|
177
|
-
typedef T type;
|
178
|
-
typedef U class_type;
|
179
|
-
typedef const U qualified_class_type;
|
180
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
181
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
182
|
-
};
|
183
|
-
template<class T, class U, class A1, class A2, class A3>
|
184
|
-
struct member_pointer<T (U::*)(A1, A2, A3) const> {
|
185
|
-
typedef T type;
|
186
|
-
typedef U class_type;
|
187
|
-
typedef const U qualified_class_type;
|
188
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
189
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
190
|
-
};
|
191
|
-
template<class T, class U, class A1, class A2, class A3, class A4>
|
192
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4) const> {
|
193
|
-
typedef T type;
|
194
|
-
typedef U class_type;
|
195
|
-
typedef const U qualified_class_type;
|
196
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
197
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
198
|
-
};
|
199
|
-
template<class T, class U, class A1, class A2, class A3, class A4, class A5>
|
200
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4, A5) const> {
|
201
|
-
typedef T type;
|
202
|
-
typedef U class_type;
|
203
|
-
typedef const U qualified_class_type;
|
204
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
205
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
206
|
-
};
|
207
|
-
template<class T, class U, class A1, class A2, class A3, class A4, class A5,
|
208
|
-
class A6>
|
209
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6) const> {
|
210
|
-
typedef T type;
|
211
|
-
typedef U class_type;
|
212
|
-
typedef const U qualified_class_type;
|
213
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
214
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
215
|
-
};
|
216
|
-
template<class T, class U, class A1, class A2, class A3, class A4, class A5,
|
217
|
-
class A6, class A7>
|
218
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7) const> {
|
219
|
-
typedef T type;
|
220
|
-
typedef U class_type;
|
221
|
-
typedef const U qualified_class_type;
|
222
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
223
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
224
|
-
};
|
225
|
-
template<class T, class U, class A1, class A2, class A3, class A4, class A5,
|
226
|
-
class A6, class A7, class A8>
|
227
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8) const> {
|
228
|
-
typedef T type;
|
229
|
-
typedef U class_type;
|
230
|
-
typedef const U qualified_class_type;
|
231
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
232
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
233
|
-
};
|
234
|
-
template<class T, class U, class A1, class A2, class A3, class A4, class A5,
|
235
|
-
class A6, class A7, class A8, class A9>
|
236
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9) const> {
|
237
|
-
typedef T type;
|
238
|
-
typedef U class_type;
|
239
|
-
typedef const U qualified_class_type;
|
240
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
241
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
242
|
-
};
|
243
|
-
// -- volatile --
|
244
|
-
template<class T, class U>
|
245
|
-
struct member_pointer<T (U::*)() volatile> {
|
246
|
-
typedef T type;
|
247
|
-
typedef U class_type;
|
248
|
-
typedef volatile U qualified_class_type;
|
249
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
250
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
251
|
-
};
|
252
|
-
template<class T, class U, class A1>
|
253
|
-
struct member_pointer<T (U::*)(A1) volatile> {
|
254
|
-
typedef T type;
|
255
|
-
typedef U class_type;
|
256
|
-
typedef volatile U qualified_class_type;
|
257
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
258
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
259
|
-
};
|
260
|
-
template<class T, class U, class A1, class A2>
|
261
|
-
struct member_pointer<T (U::*)(A1, A2) volatile> {
|
262
|
-
typedef T type;
|
263
|
-
typedef U class_type;
|
264
|
-
typedef volatile U qualified_class_type;
|
265
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
266
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
267
|
-
};
|
268
|
-
template<class T, class U, class A1, class A2, class A3>
|
269
|
-
struct member_pointer<T (U::*)(A1, A2, A3) volatile> {
|
270
|
-
typedef T type;
|
271
|
-
typedef U class_type;
|
272
|
-
typedef volatile U qualified_class_type;
|
273
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
274
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
275
|
-
};
|
276
|
-
template<class T, class U, class A1, class A2, class A3, class A4>
|
277
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4) volatile> {
|
278
|
-
typedef T type;
|
279
|
-
typedef U class_type;
|
280
|
-
typedef volatile U qualified_class_type;
|
281
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
282
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
283
|
-
};
|
284
|
-
template<class T, class U, class A1, class A2, class A3, class A4, class A5>
|
285
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4, A5) volatile> {
|
286
|
-
typedef T type;
|
287
|
-
typedef U class_type;
|
288
|
-
typedef volatile U qualified_class_type;
|
289
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
290
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
291
|
-
};
|
292
|
-
template<class T, class U, class A1, class A2, class A3, class A4, class A5,
|
293
|
-
class A6>
|
294
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6) volatile> {
|
295
|
-
typedef T type;
|
296
|
-
typedef U class_type;
|
297
|
-
typedef volatile U qualified_class_type;
|
298
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
299
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
300
|
-
};
|
301
|
-
template<class T, class U, class A1, class A2, class A3, class A4, class A5,
|
302
|
-
class A6, class A7>
|
303
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7) volatile> {
|
304
|
-
typedef T type;
|
305
|
-
typedef U class_type;
|
306
|
-
typedef volatile U qualified_class_type;
|
307
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
308
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
309
|
-
};
|
310
|
-
template<class T, class U, class A1, class A2, class A3, class A4, class A5,
|
311
|
-
class A6, class A7, class A8>
|
312
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8) volatile> {
|
313
|
-
typedef T type;
|
314
|
-
typedef U class_type;
|
315
|
-
typedef volatile U qualified_class_type;
|
316
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
317
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
318
|
-
};
|
319
|
-
template<class T, class U, class A1, class A2, class A3, class A4, class A5,
|
320
|
-
class A6, class A7, class A8, class A9>
|
321
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9) volatile> {
|
322
|
-
typedef T type;
|
323
|
-
typedef U class_type;
|
324
|
-
typedef volatile U qualified_class_type;
|
325
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
326
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
327
|
-
};
|
328
|
-
// -- const volatile
|
329
|
-
template<class T, class U>
|
330
|
-
struct member_pointer<T (U::*)() const volatile> {
|
331
|
-
typedef T type;
|
332
|
-
typedef U class_type;
|
333
|
-
typedef const volatile U qualified_class_type;
|
334
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
335
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
336
|
-
};
|
337
|
-
template<class T, class U, class A1>
|
338
|
-
struct member_pointer<T (U::*)(A1) const volatile> {
|
339
|
-
typedef T type;
|
340
|
-
typedef U class_type;
|
341
|
-
typedef const volatile U qualified_class_type;
|
342
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
343
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
344
|
-
};
|
345
|
-
template<class T, class U, class A1, class A2>
|
346
|
-
struct member_pointer<T (U::*)(A1, A2) const volatile> {
|
347
|
-
typedef T type;
|
348
|
-
typedef U class_type;
|
349
|
-
typedef const volatile U qualified_class_type;
|
350
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
351
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
352
|
-
};
|
353
|
-
template<class T, class U, class A1, class A2, class A3>
|
354
|
-
struct member_pointer<T (U::*)(A1, A2, A3) const volatile> {
|
355
|
-
typedef T type;
|
356
|
-
typedef U class_type;
|
357
|
-
typedef const volatile U qualified_class_type;
|
358
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
359
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
360
|
-
};
|
361
|
-
template<class T, class U, class A1, class A2, class A3, class A4>
|
362
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4) const volatile> {
|
363
|
-
typedef T type;
|
364
|
-
typedef U class_type;
|
365
|
-
typedef const volatile U qualified_class_type;
|
366
|
-
};
|
367
|
-
template<class T, class U, class A1, class A2, class A3, class A4, class A5>
|
368
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4, A5) const volatile> {
|
369
|
-
typedef T type;
|
370
|
-
typedef U class_type;
|
371
|
-
typedef const volatile U qualified_class_type;
|
372
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
373
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
374
|
-
};
|
375
|
-
template<class T, class U, class A1, class A2, class A3, class A4, class A5,
|
376
|
-
class A6>
|
377
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6) const volatile> {
|
378
|
-
typedef T type;
|
379
|
-
typedef U class_type;
|
380
|
-
typedef const volatile U qualified_class_type;
|
381
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
382
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
383
|
-
};
|
384
|
-
template<class T, class U, class A1, class A2, class A3, class A4, class A5,
|
385
|
-
class A6, class A7>
|
386
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7) const volatile> {
|
387
|
-
typedef T type;
|
388
|
-
typedef U class_type;
|
389
|
-
typedef const volatile U qualified_class_type;
|
390
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
391
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
392
|
-
};
|
393
|
-
template<class T, class U, class A1, class A2, class A3, class A4, class A5,
|
394
|
-
class A6, class A7, class A8>
|
395
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8) const volatile> {
|
396
|
-
typedef T type;
|
397
|
-
typedef U class_type;
|
398
|
-
typedef const volatile U qualified_class_type;
|
399
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
400
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
401
|
-
};
|
402
|
-
template<class T, class U, class A1, class A2, class A3, class A4, class A5,
|
403
|
-
class A6, class A7, class A8, class A9>
|
404
|
-
struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9) const volatile> {
|
405
|
-
typedef T type;
|
406
|
-
typedef U class_type;
|
407
|
-
typedef const volatile U qualified_class_type;
|
408
|
-
BOOST_STATIC_CONSTANT(bool, is_data_member = false);
|
409
|
-
BOOST_STATIC_CONSTANT(bool, is_function_member = true);
|
410
|
-
};
|
411
|
-
|
412
|
-
} // detail
|
413
|
-
|
414
|
-
namespace detail {
|
415
|
-
|
416
|
-
// this class holds a pointer to a member function and the object.
|
417
|
-
// when called, it just calls the member function with the parameters
|
418
|
-
// provided
|
419
|
-
|
420
|
-
// It would have been possible to use existing lambda_functors to represent
|
421
|
-
// a bound member function like this, but to have a separate template is
|
422
|
-
// safer, since now this functor doesn't mix and match with lambda_functors
|
423
|
-
// only thing you can do with this is to call it
|
424
|
-
|
425
|
-
// note that previously instantiated classes
|
426
|
-
// (other_action<member_pointer_action> and member_pointer_action_helper
|
427
|
-
// guarantee, that A and B are
|
428
|
-
// such types, that for objects a and b of corresponding types, a->*b leads
|
429
|
-
// to the builtin ->* to be called. So types that would end in a call to
|
430
|
-
// a user defined ->* do not create a member_pointer_caller object.
|
431
|
-
|
432
|
-
template<class RET, class A, class B>
|
433
|
-
class member_pointer_caller {
|
434
|
-
A a; B b;
|
435
|
-
|
436
|
-
public:
|
437
|
-
member_pointer_caller(const A& aa, const B& bb) : a(aa), b(bb) {}
|
438
|
-
|
439
|
-
RET operator()() const { return (a->*b)(); }
|
440
|
-
|
441
|
-
template<class A1>
|
442
|
-
RET operator()(const A1& a1) const { return (a->*b)(a1); }
|
443
|
-
|
444
|
-
template<class A1, class A2>
|
445
|
-
RET operator()(const A1& a1, const A2& a2) const { return (a->*b)(a1, a2); }
|
446
|
-
|
447
|
-
template<class A1, class A2, class A3>
|
448
|
-
RET operator()(const A1& a1, const A2& a2, const A3& a3) const {
|
449
|
-
return (a->*b)(a1, a2, a3);
|
450
|
-
}
|
451
|
-
|
452
|
-
template<class A1, class A2, class A3, class A4>
|
453
|
-
RET operator()(const A1& a1, const A2& a2, const A3& a3,
|
454
|
-
const A4& a4) const {
|
455
|
-
return (a->*b)(a1, a2, a3, a4);
|
456
|
-
}
|
457
|
-
|
458
|
-
template<class A1, class A2, class A3, class A4, class A5>
|
459
|
-
RET operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4,
|
460
|
-
const A5& a5) const {
|
461
|
-
return (a->*b)(a1, a2, a3, a4, a5);
|
462
|
-
}
|
463
|
-
|
464
|
-
template<class A1, class A2, class A3, class A4, class A5, class A6>
|
465
|
-
RET operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4,
|
466
|
-
const A5& a5, const A6& a6) const {
|
467
|
-
return (a->*b)(a1, a2, a3, a4, a5, a6);
|
468
|
-
}
|
469
|
-
|
470
|
-
template<class A1, class A2, class A3, class A4, class A5, class A6,
|
471
|
-
class A7>
|
472
|
-
RET operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4,
|
473
|
-
const A5& a5, const A6& a6, const A7& a7) const {
|
474
|
-
return (a->*b)(a1, a2, a3, a4, a5, a6, a7);
|
475
|
-
}
|
476
|
-
|
477
|
-
template<class A1, class A2, class A3, class A4, class A5, class A6,
|
478
|
-
class A7, class A8>
|
479
|
-
RET operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4,
|
480
|
-
const A5& a5, const A6& a6, const A7& a7,
|
481
|
-
const A8& a8) const {
|
482
|
-
return (a->*b)(a1, a2, a3, a4, a5, a6, a7, a8);
|
483
|
-
}
|
484
|
-
|
485
|
-
template<class A1, class A2, class A3, class A4, class A5, class A6,
|
486
|
-
class A7, class A8, class A9>
|
487
|
-
RET operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4,
|
488
|
-
const A5& a5, const A6& a6, const A7& a7,
|
489
|
-
const A8& a8, const A9& a9) const {
|
490
|
-
return (a->*b)(a1, a2, a3, a4, a5, a6, a7, a8, a9);
|
491
|
-
}
|
492
|
-
|
493
|
-
};
|
494
|
-
|
495
|
-
// helper templates for return type deduction and action classes
|
496
|
-
// different cases for data member, function member, neither
|
497
|
-
|
498
|
-
// true-true case
|
499
|
-
template <bool Is_data_member, bool Is_function_member>
|
500
|
-
struct member_pointer_action_helper;
|
501
|
-
// cannot be both, no body provided
|
502
|
-
|
503
|
-
// data member case
|
504
|
-
// this means, that B is a data member and A is a pointer type,
|
505
|
-
// so either built-in ->* should be called, or there is an error
|
506
|
-
template <>
|
507
|
-
struct member_pointer_action_helper<true, false> {
|
508
|
-
public:
|
509
|
-
|
510
|
-
template<class RET, class A, class B>
|
511
|
-
static RET apply(A& a, B& b) {
|
512
|
-
return a->*b;
|
513
|
-
}
|
514
|
-
|
515
|
-
template<class A, class B>
|
516
|
-
struct return_type {
|
517
|
-
private:
|
518
|
-
typedef typename detail::remove_reference_and_cv<B>::type plainB;
|
519
|
-
|
520
|
-
typedef typename detail::member_pointer<plainB>::type type0;
|
521
|
-
// we remove the reference now, as we may have to add cv:s
|
522
|
-
typedef typename boost::remove_reference<type0>::type type1;
|
523
|
-
|
524
|
-
// A is a reference to pointer
|
525
|
-
// remove the top level cv qualifiers and reference
|
526
|
-
typedef typename
|
527
|
-
detail::remove_reference_and_cv<A>::type non_ref_A;
|
528
|
-
|
529
|
-
// A is a pointer type, so take the type pointed to
|
530
|
-
typedef typename ::boost::remove_pointer<non_ref_A>::type non_pointer_A;
|
531
|
-
|
532
|
-
public:
|
533
|
-
// For non-reference types, we must add const and/or volatile if
|
534
|
-
// the pointer type has these qualifiers
|
535
|
-
// If the member is a reference, these do not have any effect
|
536
|
-
// (cv T == T if T is a reference type)
|
537
|
-
typedef typename detail::IF<
|
538
|
-
::boost::is_const<non_pointer_A>::value,
|
539
|
-
typename ::boost::add_const<type1>::type,
|
540
|
-
type1
|
541
|
-
>::RET type2;
|
542
|
-
typedef typename detail::IF<
|
543
|
-
::boost::is_volatile<non_pointer_A>::value,
|
544
|
-
typename ::boost::add_volatile<type2>::type,
|
545
|
-
type2
|
546
|
-
>::RET type3;
|
547
|
-
// add reference back
|
548
|
-
typedef typename ::boost::add_reference<type3>::type type;
|
549
|
-
};
|
550
|
-
};
|
551
|
-
|
552
|
-
// neither case
|
553
|
-
template <>
|
554
|
-
struct member_pointer_action_helper<false, false> {
|
555
|
-
public:
|
556
|
-
template<class RET, class A, class B>
|
557
|
-
static RET apply(A& a, B& b) {
|
558
|
-
// not a built in member pointer operator, just call ->*
|
559
|
-
return a->*b;
|
560
|
-
}
|
561
|
-
// an overloaded member pointer operators, user should have specified
|
562
|
-
// the return type
|
563
|
-
// At this point we know that there is no matching specialization for
|
564
|
-
// return_type_2, so try return_type_2_plain
|
565
|
-
template<class A, class B>
|
566
|
-
struct return_type {
|
567
|
-
|
568
|
-
typedef typename plain_return_type_2<
|
569
|
-
other_action<member_pointer_action>, A, B
|
570
|
-
>::type type;
|
571
|
-
};
|
572
|
-
|
573
|
-
};
|
574
|
-
|
575
|
-
|
576
|
-
// member pointer function case
|
577
|
-
// This is a built in ->* call for a member function,
|
578
|
-
// the only thing that you can do with that, is to give it some arguments
|
579
|
-
// note, it is guaranteed that A is a pointer type, and thus it cannot
|
580
|
-
// be a call to overloaded ->*
|
581
|
-
template <>
|
582
|
-
struct member_pointer_action_helper<false, true> {
|
583
|
-
public:
|
584
|
-
|
585
|
-
template<class RET, class A, class B>
|
586
|
-
static RET apply(A& a, B& b) {
|
587
|
-
typedef typename ::boost::remove_cv<B>::type plainB;
|
588
|
-
typedef typename detail::member_pointer<plainB>::type ret_t;
|
589
|
-
typedef typename ::boost::remove_cv<A>::type plainA;
|
590
|
-
|
591
|
-
// we always strip cv:s to
|
592
|
-
// make the two routes (calling and type deduction)
|
593
|
-
// to give the same results (and the const does not make any functional
|
594
|
-
// difference)
|
595
|
-
return detail::member_pointer_caller<ret_t, plainA, plainB>(a, b);
|
596
|
-
}
|
597
|
-
|
598
|
-
template<class A, class B>
|
599
|
-
struct return_type {
|
600
|
-
typedef typename detail::remove_reference_and_cv<B>::type plainB;
|
601
|
-
typedef typename detail::member_pointer<plainB>::type ret_t;
|
602
|
-
typedef typename detail::remove_reference_and_cv<A>::type plainA;
|
603
|
-
|
604
|
-
typedef detail::member_pointer_caller<ret_t, plainA, plainB> type;
|
605
|
-
};
|
606
|
-
};
|
607
|
-
|
608
|
-
} // detail
|
609
|
-
|
610
|
-
template<> class other_action<member_pointer_action> {
|
611
|
-
public:
|
612
|
-
template<class RET, class A, class B>
|
613
|
-
static RET apply(A& a, B& b) {
|
614
|
-
typedef typename
|
615
|
-
::boost::remove_cv<B>::type plainB;
|
616
|
-
|
617
|
-
return detail::member_pointer_action_helper<
|
618
|
-
boost::is_pointer<A>::value &&
|
619
|
-
detail::member_pointer<plainB>::is_data_member,
|
620
|
-
boost::is_pointer<A>::value &&
|
621
|
-
detail::member_pointer<plainB>::is_function_member
|
622
|
-
>::template apply<RET>(a, b);
|
623
|
-
}
|
624
|
-
};
|
625
|
-
|
626
|
-
// return type deduction --
|
627
|
-
|
628
|
-
// If the right argument is a pointer to data member,
|
629
|
-
// and the left argument is of compatible pointer to class type
|
630
|
-
// return type is a reference to the data member type
|
631
|
-
|
632
|
-
// if right argument is a pointer to a member function, and the left
|
633
|
-
// argument is of a compatible type, the return type is a
|
634
|
-
// member_pointer_caller (see above)
|
635
|
-
|
636
|
-
// Otherwise, return type deduction fails. There is either an error,
|
637
|
-
// or the user is trying to call an overloaded ->*
|
638
|
-
// In such a case either ret<> must be used, or a return_type_2 user
|
639
|
-
// defined specialization must be provided
|
640
|
-
|
641
|
-
|
642
|
-
template<class A, class B>
|
643
|
-
struct return_type_2<other_action<member_pointer_action>, A, B> {
|
644
|
-
private:
|
645
|
-
typedef typename
|
646
|
-
detail::remove_reference_and_cv<B>::type plainB;
|
647
|
-
public:
|
648
|
-
typedef typename
|
649
|
-
detail::member_pointer_action_helper<
|
650
|
-
detail::member_pointer<plainB>::is_data_member,
|
651
|
-
detail::member_pointer<plainB>::is_function_member
|
652
|
-
>::template return_type<A, B>::type type;
|
653
|
-
};
|
654
|
-
|
655
|
-
// this is the way the generic lambda_functor_base functions instantiate
|
656
|
-
// return type deduction. We turn it into return_type_2, so that the
|
657
|
-
// user can provide specializations on that level.
|
658
|
-
template<class Args>
|
659
|
-
struct return_type_N<other_action<member_pointer_action>, Args> {
|
660
|
-
typedef typename boost::tuples::element<0, Args>::type A;
|
661
|
-
typedef typename boost::tuples::element<1, Args>::type B;
|
662
|
-
typedef typename
|
663
|
-
return_type_2<other_action<member_pointer_action>,
|
664
|
-
typename boost::remove_reference<A>::type,
|
665
|
-
typename boost::remove_reference<B>::type
|
666
|
-
>::type type;
|
667
|
-
};
|
668
|
-
|
669
|
-
|
670
|
-
template<class Arg1, class Arg2>
|
671
|
-
inline const
|
672
|
-
lambda_functor<
|
673
|
-
lambda_functor_base<
|
674
|
-
action<2, other_action<member_pointer_action> >,
|
675
|
-
tuple<lambda_functor<Arg1>, typename const_copy_argument<Arg2>::type>
|
676
|
-
>
|
677
|
-
>
|
678
|
-
operator->*(const lambda_functor<Arg1>& a1, const Arg2& a2)
|
679
|
-
{
|
680
|
-
return
|
681
|
-
lambda_functor_base<
|
682
|
-
action<2, other_action<member_pointer_action> >,
|
683
|
-
tuple<lambda_functor<Arg1>, typename const_copy_argument<Arg2>::type>
|
684
|
-
>
|
685
|
-
(tuple<lambda_functor<Arg1>,
|
686
|
-
typename const_copy_argument<Arg2>::type>(a1, a2));
|
687
|
-
}
|
688
|
-
|
689
|
-
template<class Arg1, class Arg2>
|
690
|
-
inline const
|
691
|
-
lambda_functor<
|
692
|
-
lambda_functor_base<
|
693
|
-
action<2, other_action<member_pointer_action> >,
|
694
|
-
tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >
|
695
|
-
>
|
696
|
-
>
|
697
|
-
operator->*(const lambda_functor<Arg1>& a1, const lambda_functor<Arg2>& a2)
|
698
|
-
{
|
699
|
-
return
|
700
|
-
lambda_functor_base<
|
701
|
-
action<2, other_action<member_pointer_action> >,
|
702
|
-
tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >
|
703
|
-
>
|
704
|
-
(tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >(a1, a2));
|
705
|
-
}
|
706
|
-
|
707
|
-
template<class Arg1, class Arg2>
|
708
|
-
inline const
|
709
|
-
lambda_functor<
|
710
|
-
lambda_functor_base<
|
711
|
-
action<2, other_action<member_pointer_action> >,
|
712
|
-
tuple<typename const_copy_argument<Arg1>::type, lambda_functor<Arg2> >
|
713
|
-
>
|
714
|
-
>
|
715
|
-
operator->*(const Arg1& a1, const lambda_functor<Arg2>& a2)
|
716
|
-
{
|
717
|
-
return
|
718
|
-
lambda_functor_base<
|
719
|
-
action<2, other_action<member_pointer_action> >,
|
720
|
-
tuple<typename const_copy_argument<Arg1>::type, lambda_functor<Arg2> >
|
721
|
-
>
|
722
|
-
(tuple<typename const_copy_argument<Arg1>::type,
|
723
|
-
lambda_functor<Arg2> >(a1, a2));
|
724
|
-
}
|
725
|
-
|
726
|
-
|
727
|
-
} // namespace lambda
|
728
|
-
} // namespace boost
|
729
|
-
|
730
|
-
|
731
|
-
#endif
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|