summaryrefslogtreecommitdiff
path: root/src/third_party/boost-1.56.0/boost/thread/detail/invoke.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/boost-1.56.0/boost/thread/detail/invoke.hpp')
-rw-r--r--src/third_party/boost-1.56.0/boost/thread/detail/invoke.hpp1606
1 files changed, 0 insertions, 1606 deletions
diff --git a/src/third_party/boost-1.56.0/boost/thread/detail/invoke.hpp b/src/third_party/boost-1.56.0/boost/thread/detail/invoke.hpp
deleted file mode 100644
index c81f50fba2b..00000000000
--- a/src/third_party/boost-1.56.0/boost/thread/detail/invoke.hpp
+++ /dev/null
@@ -1,1606 +0,0 @@
-// Copyright (C) 2012-2013 Vicente J. Botet Escriba
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-// 2013/04 Vicente J. Botet Escriba
-// Provide implementation up to 9 parameters when BOOST_NO_CXX11_VARIADIC_TEMPLATES is defined.
-// Make use of Boost.Move
-// Make use of Boost.Tuple (movable)
-// 2012 Vicente J. Botet Escriba
-// Provide implementation _RET using bind when BOOST_NO_CXX11_HDR_FUNCTIONAL and BOOST_NO_SFINAE_EXPR are not defined
-// 2012 Vicente J. Botet Escriba
-// Adapt to boost libc++ implementation
-
-//===----------------------------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-// The invoke code is based on the one from libcxx.
-//===----------------------------------------------------------------------===//
-
-#ifndef BOOST_THREAD_DETAIL_INVOKE_HPP
-#define BOOST_THREAD_DETAIL_INVOKE_HPP
-
-#include <boost/config.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/thread/detail/move.hpp>
-#include <boost/core/enable_if.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/type_traits/is_base_of.hpp>
-#include <boost/type_traits/is_pointer.hpp>
-#include <boost/type_traits/is_member_function_pointer.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-#ifndef BOOST_NO_CXX11_HDR_FUNCTIONAL
-#include <functional>
-#endif
-
-namespace boost
-{
- namespace detail
- {
-
-
-#if ! defined(BOOST_NO_SFINAE_EXPR) && \
- ! defined(BOOST_NO_CXX11_DECLTYPE) && \
- ! defined(BOOST_NO_CXX11_DECLTYPE_N3276) && \
- ! defined(BOOST_THREAD_NO_CXX11_DECLTYPE_N3276) && \
- ! defined(BOOST_NO_CXX11_TRAILING_RESULT_TYPES)
-
-#define BOOST_THREAD_PROVIDES_INVOKE
-
-#if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
- // bullets 1 and 2
-
- template <class Fp, class A0, class ...Args>
- inline auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(Args) ...args)
- -> decltype((boost::forward<A0>(a0).*f)(boost::forward<Args>(args)...))
- {
- return (boost::forward<A0>(a0).*f)(boost::forward<Args>(args)...);
- }
- template <class R, class Fp, class A0, class ...Args>
- inline auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(Args) ...args)
- -> decltype((boost::forward<A0>(a0).*f)(boost::forward<Args>(args)...))
- {
- return (boost::forward<A0>(a0).*f)(boost::forward<Args>(args)...);
- }
-
- template <class Fp, class A0, class ...Args>
- inline auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(Args) ...args)
- -> decltype(((*boost::forward<A0>(a0)).*f)(boost::forward<Args>(args)...))
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<Args>(args)...);
- }
- template <class R, class Fp, class A0, class ...Args>
- inline auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(Args) ...args)
- -> decltype(((*boost::forward<A0>(a0)).*f)(boost::forward<Args>(args)...))
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<Args>(args)...);
- }
-
- // bullets 3 and 4
-
- template <class Fp, class A0>
- inline auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0)
- -> decltype(boost::forward<A0>(a0).*f)
- {
- return boost::forward<A0>(a0).*f;
- }
-
- template <class Fp, class A0>
- inline auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0)
- -> decltype((*boost::forward<A0>(a0)).*f)
- {
- return (*boost::forward<A0>(a0)).*f;
- }
-
- template <class R, class Fp, class A0>
- inline auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0)
- -> decltype(boost::forward<A0>(a0).*f)
- {
- return boost::forward<A0>(a0).*f;
- }
-
- template <class R, class Fp, class A0>
- inline auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0)
- -> decltype((*boost::forward<A0>(a0)).*f)
- {
- return (*boost::forward<A0>(a0)).*f;
- }
-
-
- // bullet 5
-
- template <class R, class Fp, class ...Args>
- inline auto invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(Args) ...args)
- -> decltype(boost::forward<Fp>(f)(boost::forward<Args>(args)...))
- {
- return boost::forward<Fp>(f)(boost::forward<Args>(args)...);
- }
- template <class Fp, class ...Args>
- inline auto invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(Args) ...args)
- -> decltype(boost::forward<Fp>(f)(boost::forward<Args>(args)...))
- {
- return boost::forward<Fp>(f)(boost::forward<Args>(args)...);
- }
-
-#else // BOOST_NO_CXX11_VARIADIC_TEMPLATES
-
- // bullets 1 and 2
-
- template <class Fp, class A0>
- inline
- auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0)
- -> decltype((boost::forward<A0>(a0).*f)())
- {
- return (boost::forward<A0>(a0).*f)();
- }
- template <class R, class Fp, class A0>
- inline
- auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0)
- -> decltype((boost::forward<A0>(a0).*f)())
- {
- return (boost::forward<A0>(a0).*f)();
- }
- template <class Fp, class A0, class A1>
- inline
- auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1)
- -> decltype((boost::forward<A0>(a0).*f)(boost::forward<A1>(a1)))
- {
- return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1));
- }
- template <class R, class Fp, class A0, class A1>
- inline
- auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1)
- -> decltype((boost::forward<A0>(a0).*f)(boost::forward<A1>(a1)))
- {
- return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1));
- }
- template <class Fp, class A0, class A1, class A2>
- inline
- auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
- -> decltype((boost::forward<A0>(a0).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2)))
- {
- return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
- }
- template <class R, class Fp, class A0, class A1, class A2>
- inline
- auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
- -> decltype((boost::forward<A0>(a0).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2)))
- {
- return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
- }
-
- template <class Fp, class A0>
- inline
- auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0)
- -> decltype(((*boost::forward<A0>(a0)).*f)())
- {
- return ((*boost::forward<A0>(a0)).*f)();
- }
- template <class R, class Fp, class A0>
- inline
- auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0)
- -> decltype(((*boost::forward<A0>(a0)).*f)())
- {
- return ((*boost::forward<A0>(a0)).*f)();
- }
- template <class Fp, class A0, class A1>
- inline
- auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1)
- -> decltype(((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1)))
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1));
- }
- template <class R, class Fp, class A0, class A1>
- inline
- auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1)
- -> decltype(((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1)))
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1));
- }
- template <class Fp, class A0, class A1, class A2>
- inline
- auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
- -> decltype(((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2)))
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
- }
- template <class R, class Fp, class A0, class A1, class A2>
- inline
- auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
- -> decltype(((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2)))
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
- }
-
- // bullets 3 and 4
-
- template <class Fp, class A0>
- inline
- auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0)
- -> decltype(boost::forward<A0>(a0).*f)
- {
- return boost::forward<A0>(a0).*f;
- }
- template <class R, class Fp, class A0>
- inline
- auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0)
- -> decltype(boost::forward<A0>(a0).*f)
- {
- return boost::forward<A0>(a0).*f;
- }
-
- template <class Fp, class A0>
- inline
- auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0)
- -> decltype((*boost::forward<A0>(a0)).*f)
- {
- return (*boost::forward<A0>(a0)).*f;
- }
- template <class R, class Fp, class A0>
- inline
- auto
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A0) a0)
- -> decltype((*boost::forward<A0>(a0)).*f)
- {
- return (*boost::forward<A0>(a0)).*f;
- }
-
- // bullet 5
-
- template <class Fp>
- inline
- auto invoke(BOOST_THREAD_RV_REF(Fp) f)
- -> decltype(boost::forward<Fp>(f)())
- {
- return boost::forward<Fp>(f)();
- }
- template <class Fp, class A1>
- inline
- auto invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1)
- -> decltype(boost::forward<Fp>(f)(boost::forward<A1>(a1)))
- {
- return boost::forward<Fp>(f)(boost::forward<A1>(a1));
- } template <class Fp, class A1, class A2>
- inline
- auto invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
- -> decltype(boost::forward<Fp>(f)(boost::forward<A1>(a1), boost::forward<A2>(a2)))
- {
- return boost::forward<Fp>(f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
- }
- template <class Fp, class A1, class A2, class A3>
- inline
- auto invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
- -> decltype(boost::forward<Fp>(f)(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3)))
- {
- return boost::forward<Fp>(f)(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
- }
-
-
- template <class R, class Fp>
- inline
- auto invoke(BOOST_THREAD_RV_REF(Fp) f)
- -> decltype(boost::forward<Fp>(f)())
- {
- return boost::forward<Fp>(f)();
- }
- template <class R, class Fp, class A1>
- inline
- auto invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1)
- -> decltype(boost::forward<Fp>(f)(boost::forward<A1>(a1)))
- {
- return boost::forward<Fp>(f)(boost::forward<A1>(a1));
- }
- template <class R, class Fp, class A1, class A2>
- inline
- auto invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
- -> decltype(boost::forward<Fp>(f)(boost::forward<A1>(a1), boost::forward<A2>(a2)))
- {
- return boost::forward<Fp>(f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
- }
- template <class R, class Fp, class A1, class A2, class A3>
- inline
- auto invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
- -> decltype(boost::forward<Fp>(f)(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3)))
- {
- return boost::forward<Fp>(f)(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
- }
-
-#endif // BOOST_NO_CXX11_VARIADIC_TEMPLATES
-
-#elif ! defined(BOOST_NO_SFINAE_EXPR) && \
- ! defined BOOST_NO_CXX11_HDR_FUNCTIONAL && \
- defined BOOST_MSVC
-
-//#error
- template <class Ret, class Fp>
- inline
- Ret invoke(BOOST_THREAD_RV_REF(Fp) f)
- {
- return f();
- }
- template <class Ret, class Fp, class A1>
- inline
- Ret invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1)
- {
- return std::bind(boost::forward<Fp>(f), boost::forward<A1>(a1))();
- }
- template <class Ret, class Fp, class A1, class A2>
- inline
- Ret invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
- {
- return std::bind(boost::forward<Fp>(f), boost::forward<A1>(a1), boost::forward<A2>(a2))();
- }
- template <class Ret, class Fp, class A1, class A2, class A3>
- inline
- Ret invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
- {
- return std::bind(boost::forward<Fp>(f), boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3))();
- }
-
-#define BOOST_THREAD_PROVIDES_INVOKE_RET
-
-#elif ! defined BOOST_MSVC
-//!!!!! WARNING !!!!! THIS DOESN'T WORKS YET
-#define BOOST_THREAD_PROVIDES_INVOKE_RET
-
-#if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
-
- // bullet 1
- // (t1.*f)(t2, ..., tN) when f is a pointer to a member function of a class T and t1 is an object of
- // type T or a reference to an object of type T or a reference to an object of a type derived from T
- template <class Ret, class A, class A0, class ...Args>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(Args...), BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(Args) ...args)
- {
- return (boost::forward<A0>(a0).*f)(boost::forward<Args>(args)...);
- }
-
- template <class Ret, class A, class A0, class ...Args>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(Args...) const, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(Args) ...args)
- {
- return (boost::forward<A0>(a0).*f)(boost::forward<Args>(args)...);
- }
-
- template <class Ret, class A, class A0, class ...Args>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(Args...) volatile, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(Args) ...args)
- {
- return (boost::forward<A0>(a0).*f)(boost::forward<Args>(args)...);
- }
-
- template <class Ret, class A, class A0, class ...Args>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(Args...) const volatile, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(Args) ...args)
- {
- return (boost::forward<A0>(a0).*f)(boost::forward<Args>(args)...);
- }
-
- // bullet 2
- // ((*t1).*f)(t2, ..., tN) when f is a pointer to a member function of a class T and t1 is not one of
- // the types described in the previous item;
- template <class Ret, class A, class A0, class ...Args>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(Args...), BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(Args) ...args)
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<Args>(args)...);
- }
-
- template <class Ret, class A, class A0, class ...Args>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(Args...) const, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(Args) ...args)
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<Args>(args)...);
- }
-
- template <class Ret, class A, class A0, class ...Args>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(Args...) volatile, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(Args) ...args)
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<Args>(args)...);
- }
-
- template <class Ret, class A, class A0, class ...Args>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(Args...) const volatile, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(Args) ...args)
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<Args>(args)...);
- }
-
- // bullet 3
- // t1.*f when N == 1 and f is a pointer to member data of a class T and t1 is an object of type T or a
- // reference to an object of type T or a reference to an object of a type derived from T;
-// template <class Ret, class A, class A0>
-// inline
-// typename enable_if_c
-// <
-// is_base_of<A, typename remove_reference<A0>::type>::value,
-// typename detail::apply_cv<A0, A>::type&
-// >::type
-// invoke(Ret A::* f, BOOST_THREAD_RV_REF(A0) a0)
-// {
-// return boost::forward<A0>(a0).*f;
-// }
-
- // bullet 4
- // (*t1).*f when N == 1 and f is a pointer to member data of a class T and t1 is not one of the types
- //described in the previous item;
-
-// template <class A0, class Ret, bool>
-// struct d4th_helper
-// {
-// };
-//
-// template <class A0, class Ret>
-// struct d4th_helper<A0, Ret, true>
-// {
-// typedef typename apply_cv<decltype(*declval<A0>()), Ret>::type type;
-// };
-//
-// template <class Ret, class A, class A0>
-// inline
-// typename detail::4th_helper<A, Ret,
-// !is_base_of<A,
-// typename remove_reference<A0>::type
-// >::value
-// >::type&
-// invoke(Ret A::* f, BOOST_THREAD_RV_REF(A0) a0)
-// {
-// return (*boost::forward<A0>(a0)).*f;
-// }
-
-// template <class Ret, class A, class A0>
-// inline
-// typename enable_if_c
-// <
-// !is_base_of<A, typename remove_reference<A0>::type>::value,
-// typename detail::ref_return1<Ret A::*, A0>::type
-// >::type
-// invoke(Ret A::* f, BOOST_THREAD_RV_REF(A0) a0)
-// {
-// return (*boost::forward<A0>(a0)).*f;
-// }
-
- // bullet 5
- // f(t1, t2, ..., tN) in all other cases.
-
- template <class Ret, class Fp, class ...Args>
- inline Ret do_invoke(mpl::false_, BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(Args) ...args)
- {
- return boost::forward<Fp>(f)(boost::forward<Args>(args)...);
- }
-
- template <class Ret, class Fp, class ...Args>
- inline Ret do_invoke(mpl::true_, BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(Args) ...args)
- {
- return f(boost::forward<Args>(args)...);
- }
-
- template <class Ret, class Fp, class ...Args>
- inline
- typename disable_if_c
- <
- is_member_function_pointer<Fp>::value,
- Ret
- >::type
- invoke(BOOST_THREAD_RV_REF(Fp) f, BOOST_THREAD_RV_REF(Args) ...args)
- {
- return boost::detail::do_invoke<Ret>(boost::is_pointer<Fp>(), boost::forward<Fp>(f), boost::forward<Args>(args)...);
- }
-#else // BOOST_NO_CXX11_VARIADIC_TEMPLATES
- // bullet 1
- // (t1.*f)(t2, ..., tN) when f is a pointer to a member function of a class T and t1 is an object of
- // type T or a reference to an object of type T or a reference to an object of a type derived from T
-
- template <class Ret, class A, class A0>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(), A0& a0)
- {
- return (a0.*f)();
- }
- template <class Ret, class A, class A0>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(), A0* a0)
- {
- return ((*a0).*f)();
- }
-
- template <class Ret, class A, class A0, class A1>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1),
- A0& a0, BOOST_THREAD_RV_REF(A1) a1
- )
- {
- return (a0.*f)(boost::forward<A1>(a1));
- }
- template <class Ret, class A, class A0, class A1>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1), A0& a0, A1 a1)
- {
- return (a0.*f)(a1);
- }
- template <class Ret, class A, class A0, class A1>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1), A0* a0, BOOST_THREAD_RV_REF(A1) a1
- )
- {
- return (*(a0).*f)(boost::forward<A1>(a1));
- }
- template <class Ret, class A, class A0, class A1>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1), A0* a0, A1 a1)
- {
- return (*a0.*f)(a1);
- }
- template <class Ret, class A, class A0, class A1, class A2>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2),
- A0& a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2
- )
- {
- return (a0.*f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
- }
- template <class Ret, class A, class A0, class A1, class A2>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2), A0* a0, A1 a1, A2 a2)
- {
- return ((*a0).*f)(a1, a2);
- }
- template <class Ret, class A, class A0, class A1, class A2, class A3>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2, A3),
- A0& a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
- {
- return (a0.*f)(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
- }
- template <class Ret, class A, class A0, class A1, class A2, class A3>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2, A3), A0* a0, A1 a1, A2 a2, A3 a3)
- {
- return ((*a0).*f)(a1, a2, a3);
- }
-
-///
- template <class Ret, class A, class A0>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)() const, A0 const& a0)
- {
- return (a0.*f)();
- }
- template <class Ret, class A, class A0>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)() const, A0 const* a0)
- {
- return ((*a0).*f)();
- }
- template <class Ret, class A, class A0, class A1>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1) const, A0 const& a0, BOOST_THREAD_RV_REF(A1) a1)
- {
- return (a0.*f)(boost::forward<A1>(a1));
- }
- template <class Ret, class A, class A0, class A1>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1) const, A0 const* a0, BOOST_THREAD_RV_REF(A1) a1)
- {
- return ((*a0).*f)(boost::forward<A1>(a1));
- }
-
- template <class Ret, class A, class A0, class A1>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1) const, A0 const& a0, A1 a1)
- {
- return (a0.*f)(a1);
- }
- template <class Ret, class A, class A0, class A1, class A2>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2) const,
- A0 const& a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2
- )
- {
- return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2)
- );
- }
- template <class Ret, class A, class A0, class A1, class A2>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2) const, A0 const& a0, A1 a1, A2 a2)
- {
- return (a0.*f)(a1, a2);
- }
- template <class Ret, class A, class A0, class A1, class A2, class A3>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2, A3) const,
- BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3
- )
- {
- return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
- }
- template <class Ret, class A, class A0, class A1, class A2, class A3>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2, A3) const, A0 a0, A1 a1, A2 a2, A3 a3)
- {
- return (a0.*f)(a1, a2, a3);
- }
- ///
- template <class Ret, class A, class A0>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)() volatile, BOOST_THREAD_RV_REF(A0) a0)
- {
- return (boost::forward<A0>(a0).*f)();
- }
- template <class Ret, class A, class A0, class A1>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1) volatile, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1)
- {
- return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1));
- }
- template <class Ret, class A, class A0, class A1>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1) volatile, A0 a0, A1 a1)
- {
- return (a0.*f)(a1);
- }
- template <class Ret, class A, class A0, class A1, class A2>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2) volatile,
- BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
- {
- return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
- }
- template <class Ret, class A, class A0, class A1, class A2>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2) volatile, A0 a0, A1 a1, A2 a2 )
- {
- return (a0.*f)(a1, a2);
- }
- template <class Ret, class A, class A0, class A1, class A2, class A3>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2, A3) volatile,
- BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3
- )
- {
- return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
- }
- template <class Ret, class A, class A0, class A1, class A2, class A3>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2, A3) volatile, A0 a0, A1 a1, A2 a2, A3 a3)
- {
- return (a0.*f)(a1, a2, a3);
- }
- ///
- template <class Ret, class A, class A0>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)() const volatile, BOOST_THREAD_RV_REF(A0) a0)
- {
- return (boost::forward<A0>(a0).*f)();
- }
- template <class Ret, class A, class A0, class A1>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1) const volatile, BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1)
- {
- return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1));
- }
- template <class Ret, class A, class A0, class A1>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1) const volatile, A0 a0, A1 a1)
- {
- return (a0.*f)(a1);
- }
- template <class Ret, class A, class A0, class A1, class A2>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2) const volatile,
- BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2
- )
- {
- return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
- }
- template <class Ret, class A, class A0, class A1, class A2>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2) const volatile,
- A0 a0, A1 a1, A2 a2
- )
- {
- return (a0.*f)(a1, a2);
- }
- template <class Ret, class A, class A0, class A1, class A2, class A3>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2, A3) const volatile,
- BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3
- )
- {
- return (boost::forward<A0>(a0).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
- }
- template <class Ret, class A, class A0, class A1, class A2, class A3>
- inline
- typename enable_if_c
- <
- is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2, A3) const volatile,
- A0 a0, A1 a1, A2 a2, A3 a3
- )
- {
- return (a0.*f)(a1, a2, a3);
- }
-
- // bullet 2
- // ((*t1).*f)(t2, ..., tN) when f is a pointer to a member function of a class T and t1 is not one of
- // the types described in the previous item;
- template <class Ret, class A, class A0>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(), BOOST_THREAD_RV_REF(A0) a0)
- {
- return ((*boost::forward<A0>(a0)).*f)();
- }
- template <class Ret, class A, class A0, class A1>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1), BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1)
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1));
- }
- template <class Ret, class A, class A0, class A1>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1), A0 a0, A1 a1)
- {
- return ((*a0).*f)(a1);
- }
- template <class Ret, class A, class A0, class A1, class A2>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, BOOST_THREAD_RV_REF(A2)),
- BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
- }
- template <class Ret, class A, class A0, class A1, class A2>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2), A0 a0, A1 a1, A2 a2)
- {
- return ((*a0).*f)(a1, a2);
- }
- template <class Ret, class A, class A0, class A1, class A2, class A3>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, BOOST_THREAD_RV_REF(A2), BOOST_THREAD_RV_REF(A3)),
- BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3)
- );
- }
- template <class Ret, class A, class A0, class A1, class A2, class A3>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2, A3), A0 a0, A1 a1, A2 a2, A3 a3)
- {
- return ((*a0).*f)(a1, a2, a3);
- }
-
-///
- template <class Ret, class A, class A0>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)() const, BOOST_THREAD_RV_REF(A0) a0)
- {
- return ((*boost::forward<A0>(a0)).*f)();
- }
- template <class Ret, class A, class A0, class A1>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1) const,
- BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1)
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1));
- }
- template <class Ret, class A, class A0, class A1>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1) const, BOOST_THREAD_RV_REF(A0) a0, A1 a1)
- {
- return ((*boost::forward<A0>(a0)).*f)(a1);
- }
- template <class Ret, class A, class A0, class A1>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1) const, A0 a0, A1 a1)
- {
- return ((*a0).*f)(a1);
- }
- template <class Ret, class A, class A0, class A1, class A2>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2) const,
- BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
- }
- template <class Ret, class A, class A0, class A1, class A2>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2) const, A0 a0, A1 a1, A2 a2)
- {
- return ((*a0).*f)(a1, a2);
- }
- template <class Ret, class A, class A0, class A1, class A2, class A3>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2, A3) const,
- BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
- }
- template <class Ret, class A, class A0, class A1, class A2, class A3>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2, A3) const,
- A0 a0, A1 a1, A2 a2, A3 a3)
- {
- return ((*a0).*f)(a1, a2, a3);
- }
- ///
- template <class Ret, class A, class A0>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)() volatile, BOOST_THREAD_RV_REF(A0) a0)
- {
- return ((*boost::forward<A0>(a0)).*f)();
- }
- template <class Ret, class A, class A0, class A1>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1) volatile,
- BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1)
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1));
- }
- template <class Ret, class A, class A0, class A1>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1) volatile, A0 a0, A1 a1)
- {
- return ((*a0).*f)(a1);
- }
- template <class Ret, class A, class A0, class A1, class A2>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2) volatile,
- BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
- }
- template <class Ret, class A, class A0, class A1, class A2>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2) volatile, A0 a0, A1 a1, A2 a2)
- {
- return ((*a0).*f)(a1, a2);
- }
- template <class Ret, class A, class A0, class A1, class A2, class A3>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2, A3) volatile,
- BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
- }
- template <class Ret, class A, class A0, class A1, class A2, class A3>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2, A3) volatile, A0 a0, A1 a1, A2 a2, A3 a3)
- {
- return ((*a0).*f)(a1, a2, a3);
- }
- ///
- template <class Ret, class A, class A0>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)() const volatile, BOOST_THREAD_RV_REF(A0) a0)
- {
- return ((*boost::forward<A0>(a0)).*f)();
- }
- template <class Ret, class A, class A0>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)() const volatile, A0 a0)
- {
- return ((*a0).*f)();
- }
- template <class Ret, class A, class A0, class A1>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1) const volatile,
- BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1)
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1));
- }
- template <class Ret, class A, class A0, class A1>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1) const volatile, A0 a0, A1 a1)
- {
- return ((*a0).*f)(a1);
- }
- template <class Ret, class A, class A0, class A1, class A2>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2) const volatile,
- BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
- }
- template <class Ret, class A, class A0, class A1, class A2>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2) const volatile,
- A0 a0, A1 a1, A2 a2)
- {
- return ((*a0).*f)(a1, a2);
- }
- template <class Ret, class A, class A0, class A1, class A2, class A3>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2, A3) const volatile,
- BOOST_THREAD_RV_REF(A0) a0, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
- {
- return ((*boost::forward<A0>(a0)).*f)(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
- }
- template <class Ret, class A, class A0, class A1, class A2, class A3>
- inline
- typename enable_if_c
- <
- ! is_base_of<A, typename remove_reference<A0>::type>::value,
- Ret
- >::type
- invoke(Ret (A::*f)(A1, A2, A3) const volatile,
- A0 a0, A1 a1, A2 a2, A3 a3)
- {
- return ((*a0).*f)(a1, a2, a3);
- }
- // bullet 3
- // t1.*f when N == 1 and f is a pointer to member data of a class T and t1 is an object of type T or a
- // reference to an object of type T or a reference to an object of a type derived from T;
-// template <class Ret, class A, class A0>
-// inline
-// typename enable_if_c
-// <
-// is_base_of<A, typename remove_reference<A0>::type>::value,
-// typename detail::apply_cv<A0, A>::type&
-// >::type
-// invoke(Ret A::* f, BOOST_THREAD_RV_REF(A0) a0)
-// {
-// return boost::forward<A0>(a0).*f;
-// }
-
- // bullet 4
- // (*t1).*f when N == 1 and f is a pointer to member data of a class T and t1 is not one of the types
- //described in the previous item;
-
-// template <class A0, class Ret, bool>
-// struct d4th_helper
-// {
-// };
-//
-// template <class A0, class Ret>
-// struct d4th_helper<A0, Ret, true>
-// {
-// typedef typename apply_cv<decltype(*declval<A0>()), Ret>::type type;
-// };
-//
-// template <class Ret, class A, class A0>
-// inline
-// typename detail::4th_helper<A, Ret,
-// !is_base_of<A,
-// typename remove_reference<A0>::type
-// >::value
-// >::type&
-// invoke(Ret A::* f, BOOST_THREAD_RV_REF(A0) a0)
-// {
-// return (*boost::forward<A0>(a0)).*f;
-// }
-
-// template <class Ret, class A, class A0>
-// inline
-// typename enable_if_c
-// <
-// !is_base_of<A, typename remove_reference<A0>::type>::value,
-// typename detail::ref_return1<Ret A::*, A0>::type
-// >::type
-// invoke(Ret A::* f, BOOST_THREAD_RV_REF(A0) a0)
-// {
-// return (*boost::forward<A0>(a0)).*f;
-// }
-
- // bullet 5
- // f(t1, t2, ..., tN) in all other cases.
-
- template <class Ret, class Fp>
- inline Ret do_invoke(mpl::false_, BOOST_THREAD_FWD_REF(Fp) f)
- {
- return boost::forward<Fp>(f)();
- }
- template <class Ret, class Fp>
- inline Ret do_invoke(mpl::true_, BOOST_THREAD_FWD_REF(Fp) f)
- {
- return f();
- }
- template <class Ret, class Fp>
- inline
- typename disable_if_c
- <
- is_member_function_pointer<Fp>::value,
- Ret
- >::type
- invoke(BOOST_THREAD_FWD_REF(Fp) f)
- {
- return boost::detail::do_invoke<Ret>(boost::is_pointer<Fp>(), boost::forward<Fp>(f));
- }
-
- template <class Ret, class Fp, class A1>
- inline Ret do_invoke(mpl::false_, BOOST_THREAD_FWD_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1)
- {
- return boost::forward<Fp>(f)(boost::forward<A1>(a1));
- }
- template <class Ret, class Fp, class A1>
- inline Ret do_invoke(mpl::true_, BOOST_THREAD_FWD_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1)
- {
- return f(boost::forward<A1>(a1));
- }
- template <class Ret, class Fp, class A1>
- inline
- typename disable_if_c
- <
- is_member_function_pointer<Fp>::value,
- Ret
- >::type
- invoke(BOOST_THREAD_FWD_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1)
- {
- return boost::detail::do_invoke<Ret>(boost::is_pointer<Fp>(), boost::forward<Fp>(f), boost::forward<A1>(a1));
- }
-
- template <class Ret, class Fp, class A1, class A2>
- inline Ret do_invoke(mpl::false_, BOOST_THREAD_FWD_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
- {
- return boost::forward<Fp>(f)(boost::forward<A1>(a1), boost::forward<A2>(a2));
- }
- template <class Ret, class Fp, class A1, class A2>
- inline Ret do_invoke(mpl::true_, BOOST_THREAD_FWD_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
- {
- return f(boost::forward<A1>(a1), boost::forward<A2>(a2));
- }
- template <class Ret, class Fp, class A1, class A2>
- inline
- typename disable_if_c
- <
- is_member_function_pointer<Fp>::value,
- Ret
- >::type
- invoke(BOOST_THREAD_FWD_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
- {
- return boost::detail::do_invoke<Ret>(boost::is_pointer<Fp>(), boost::forward<Fp>(f), boost::forward<A1>(a1), boost::forward<A2>(a2));
- }
-
- template <class Ret, class Fp, class A1, class A2, class A3>
- inline Ret do_invoke(mpl::false_, BOOST_THREAD_FWD_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
- {
- return boost::forward<Fp>(f)(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
- }
- template <class Ret, class Fp, class A1, class A2, class A3>
- inline Ret do_invoke(mpl::true_, BOOST_THREAD_FWD_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
- {
- return f(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
- }
- template <class Ret, class Fp, class A1, class A2, class A3>
- inline
- typename disable_if_c
- <
- is_member_function_pointer<Fp>::value,
- Ret
- >::type
- invoke(BOOST_THREAD_FWD_REF(Fp) f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
- {
- return boost::detail::do_invoke<Ret>(boost::is_pointer<Fp>(), boost::forward<Fp>(f), boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
- }
-
-
- template <class Ret, class Fp, class A1>
- inline Ret do_invoke(mpl::false_, BOOST_THREAD_FWD_REF(Fp) f, A1 a1)
- {
- return boost::forward<Fp>(f)(a1);
- }
- template <class Ret, class Fp, class A1>
- inline Ret do_invoke(mpl::true_, BOOST_THREAD_FWD_REF(Fp) f, A1 a1)
- {
- return f(a1);
- }
- template <class Ret, class Fp, class A1>
- inline
- typename disable_if_c
- <
- is_member_function_pointer<Fp>::value,
- Ret
- >::type
- invoke(BOOST_THREAD_FWD_REF(Fp) f, A1 a1)
- {
- return boost::detail::do_invoke<Ret>(boost::is_pointer<Fp>(), boost::forward<Fp>(f), a1);
- }
-
- template <class Ret, class Fp, class A1, class A2>
- inline Ret do_invoke(mpl::false_, BOOST_THREAD_FWD_REF(Fp) f, A1 a1, A2 a2)
- {
- return boost::forward<Fp>(f)(a1, a2);
- }
- template <class Ret, class Fp, class A1, class A2>
- inline Ret do_invoke(mpl::true_, BOOST_THREAD_FWD_REF(Fp) f, A1 a1, A2 a2)
- {
- return f(a1, a2);
- }
- template <class Ret, class Fp, class A1, class A2>
- inline
- typename disable_if_c
- <
- is_member_function_pointer<Fp>::value,
- Ret
- >::type
- invoke(BOOST_THREAD_FWD_REF(Fp) f, A1 a1, A2 a2)
- {
- return boost::detail::do_invoke<Ret>(boost::is_pointer<Fp>(), boost::forward<Fp>(f), a1, a2);
- }
-
- template <class Ret, class Fp, class A1, class A2, class A3>
- inline Ret do_invoke(mpl::false_, BOOST_THREAD_FWD_REF(Fp) f, A1 a1, A2 a2, A3 a3)
- {
- return boost::forward<Fp>(f)(a1, a2, a3);
- }
- template <class Ret, class Fp, class A1, class A2, class A3>
- inline Ret do_invoke(mpl::true_, BOOST_THREAD_FWD_REF(Fp) f, A1 a1, A2 a2, A3 a3)
- {
- return f(a1, a2, a3);
- }
- template <class Ret, class Fp, class A1, class A2, class A3>
- inline
- typename disable_if_c
- <
- is_member_function_pointer<Fp>::value,
- Ret
- >::type
- invoke(BOOST_THREAD_FWD_REF(Fp) f, A1 a1, A2 a2, A3 a3)
- {
- return boost::detail::do_invoke<Ret>(boost::is_pointer<Fp>(), boost::forward<Fp>(f), a1, a2, a3);
- }
-
-
- ///
- template <class Ret, class Fp>
- inline
- typename disable_if_c
- <
- is_member_function_pointer<Fp>::value,
- Ret
- >::type
- invoke(Fp &f)
- {
- return f();
- }
- template <class Ret, class Fp, class A1>
- inline
- typename disable_if_c
- <
- is_member_function_pointer<Fp>::value,
- Ret
- >::type
- invoke(Fp &f, BOOST_THREAD_RV_REF(A1) a1)
- {
- return f(boost::forward<A1>(a1));
- }
- template <class Ret, class Fp, class A1>
- inline
- typename disable_if_c
- <
- is_member_function_pointer<Fp>::value,
- Ret
- >::type
- invoke(Fp &f, A1 a1)
- {
- return f(a1);
- }
- template <class Ret, class Fp, class A1, class A2>
- inline
- typename disable_if_c
- <
- is_member_function_pointer<Fp>::value,
- Ret
- >::type
- invoke(Fp &f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2)
- {
- return f(boost::forward<A1>(a1), boost::forward<A2>(a2));
- }
- template <class Ret, class Fp, class A1, class A2>
- inline
- typename disable_if_c
- <
- is_member_function_pointer<Fp>::value,
- Ret
- >::type
- invoke(Fp &f, A1 a1, A2 a2)
- {
- return f(a1, a2);
- }
- template <class Ret, class Fp, class A1, class A2, class A3>
- inline
- typename disable_if_c
- <
- is_member_function_pointer<Fp>::value,
- Ret
- >::type
- invoke(Fp &f, BOOST_THREAD_RV_REF(A1) a1, BOOST_THREAD_RV_REF(A2) a2, BOOST_THREAD_RV_REF(A3) a3)
- {
- return f(boost::forward<A1>(a1), boost::forward<A2>(a2), boost::forward<A3>(a3));
- }
- template <class Ret, class Fp, class A1, class A2, class A3>
- inline
- typename disable_if_c
- <
- is_member_function_pointer<Fp>::value,
- Ret
- >::type
- invoke(Fp &f, A1 a1, A2 a2, A3 a3)
- {
- return f(a1, a2, a3);
- }
- ///
-
-#endif // BOOST_NO_CXX11_VARIADIC_TEMPLATES
-
-#endif // all
- }
- }
-
-#endif // header