diff options
Diffstat (limited to '3rdParty/Boost/src/boost/lambda/detail/lambda_functor_base.hpp')
-rw-r--r-- | 3rdParty/Boost/src/boost/lambda/detail/lambda_functor_base.hpp | 615 |
1 files changed, 615 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/lambda/detail/lambda_functor_base.hpp b/3rdParty/Boost/src/boost/lambda/detail/lambda_functor_base.hpp new file mode 100644 index 0000000..b084acd --- /dev/null +++ b/3rdParty/Boost/src/boost/lambda/detail/lambda_functor_base.hpp @@ -0,0 +1,615 @@ +// Boost Lambda Library lambda_functor_base.hpp ----------------------------- +// +// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi) +// +// 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) +// +// For more information, see www.boost.org + +// ------------------------------------------------------------ + +#ifndef BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_HPP +#define BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_HPP + +#include "boost/type_traits/add_reference.hpp" +#include "boost/type_traits/add_const.hpp" +#include "boost/type_traits/remove_const.hpp" +#include "boost/lambda/detail/lambda_fwd.hpp" +#include "boost/lambda/detail/lambda_traits.hpp" + +namespace boost { +namespace lambda { + +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) +#pragma warning(push) +#pragma warning(disable:4512) //assignment operator could not be generated +#endif + + // for return type deductions we wrap bound argument to this class, + // which fulfils the base class contract for lambda_functors +template <class T> +class identity { + + T elem; +public: + + typedef T element_t; + + // take all parameters as const references. Note that non-const references + // stay as they are. + typedef typename boost::add_reference< + typename boost::add_const<T>::type + >::type par_t; + + explicit identity(par_t t) : elem(t) {} + + template <typename SigArgs> + struct sig { typedef typename boost::remove_const<element_t>::type type; }; + + template<class RET, CALL_TEMPLATE_ARGS> + RET call(CALL_FORMAL_ARGS) const { CALL_USE_ARGS; return elem; } +}; + +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) +#pragma warning(pop) +#endif + +template <class T> +inline lambda_functor<identity<T&> > var(T& t) { return identity<T&>(t); } + + // for lambda functors, var is an identity operator. It was forbidden + // at some point, but we might want to var something that can be a + // non-lambda functor or a lambda functor. +template <class T> +lambda_functor<T> var(const lambda_functor<T>& t) { return t; } + +template <class T> struct var_type { + typedef lambda_functor<identity<T&> > type; +}; + + +template <class T> +inline +lambda_functor<identity<typename bound_argument_conversion<const T>::type> > +constant(const T& t) { + return identity<typename bound_argument_conversion<const T>::type>(t); +} +template <class T> +lambda_functor<T> constant(const lambda_functor<T>& t) { return t; } + +template <class T> struct constant_type { + typedef + lambda_functor< + identity<typename bound_argument_conversion<const T>::type> + > type; +}; + + + +template <class T> +inline lambda_functor<identity<const T&> > constant_ref(const T& t) { + return identity<const T&>(t); +} +template <class T> +lambda_functor<T> constant_ref(const lambda_functor<T>& t) { return t; } + +template <class T> struct constant_ref_type { + typedef + lambda_functor<identity<const T&> > type; +}; + + + + // as_lambda_functor turns any types to lambda functors + // non-lambda_functors will be bound argument types +template <class T> +struct as_lambda_functor { + typedef typename + detail::remove_reference_and_cv<T>::type plain_T; + typedef typename + detail::IF<is_lambda_functor<plain_T>::value, + plain_T, + lambda_functor< + identity<typename bound_argument_conversion<T>::type> + > + >::RET type; +}; + +// turns arbitrary objects into lambda functors +template <class T> +inline +lambda_functor<identity<typename bound_argument_conversion<const T>::type> > +to_lambda_functor(const T& t) { + return identity<typename bound_argument_conversion<const T>::type>(t); +} + +template <class T> +inline lambda_functor<T> +to_lambda_functor(const lambda_functor<T>& t) { + return t; +} + +namespace detail { + + + +// In a call constify_rvals<T>::go(x) +// x should be of type T. If T is a non-reference type, do +// returns x as const reference. +// Otherwise the type doesn't change. +// The purpose of this class is to avoid +// 'cannot bind temporaries to non-const references' errors. +template <class T> struct constify_rvals { + template<class U> + static inline const U& go(const U& u) { return u; } +}; + +template <class T> struct constify_rvals<T&> { + template<class U> + static inline U& go(U& u) { return u; } +}; + + // check whether one of the elements of a tuple (cons list) is of type + // null_type. Needed, because the compiler goes ahead and instantiates + // sig template for nullary case even if the nullary operator() is not + // called +template <class T> struct is_null_type +{ BOOST_STATIC_CONSTANT(bool, value = false); }; + +template <> struct is_null_type<null_type> +{ BOOST_STATIC_CONSTANT(bool, value = true); }; + +template<class Tuple> struct has_null_type { + BOOST_STATIC_CONSTANT(bool, value = (is_null_type<typename Tuple::head_type>::value || has_null_type<typename Tuple::tail_type>::value)); +}; +template<> struct has_null_type<null_type> { + BOOST_STATIC_CONSTANT(bool, value = false); +}; + + +// helpers ------------------- + + +template<class Args, class SigArgs> +class deduce_argument_types_ { + typedef typename as_lambda_functor<typename Args::head_type>::type lf_t; + typedef typename lf_t::inherited::template sig<SigArgs>::type el_t; +public: + typedef + boost::tuples::cons< + el_t, + typename deduce_argument_types_<typename Args::tail_type, SigArgs>::type + > type; +}; + +template<class SigArgs> +class deduce_argument_types_<null_type, SigArgs> { +public: + typedef null_type type; +}; + + +// // note that tuples cannot have plain function types as elements. +// // Hence, all other types will be non-const, except references to +// // functions. +// template <class T> struct remove_reference_except_from_functions { +// typedef typename boost::remove_reference<T>::type t; +// typedef typename detail::IF<boost::is_function<t>::value, T, t>::RET type; +// }; + +template<class Args, class SigArgs> +class deduce_non_ref_argument_types_ { + typedef typename as_lambda_functor<typename Args::head_type>::type lf_t; + typedef typename lf_t::inherited::template sig<SigArgs>::type el_t; +public: + typedef + boost::tuples::cons< + // typename detail::remove_reference_except_from_functions<el_t>::type, + typename boost::remove_reference<el_t>::type, + typename deduce_non_ref_argument_types_<typename Args::tail_type, SigArgs>::type + > type; +}; + +template<class SigArgs> +class deduce_non_ref_argument_types_<null_type, SigArgs> { +public: + typedef null_type type; +}; + + // ------------- + +// take stored Args and Open Args, and return a const list with +// deduced elements (real return types) +template<class Args, class SigArgs> +class deduce_argument_types { + typedef typename deduce_argument_types_<Args, SigArgs>::type t1; +public: + typedef typename detail::IF< + has_null_type<t1>::value, null_type, t1 + >::RET type; +}; + +// take stored Args and Open Args, and return a const list with +// deduced elements (references are stripped from the element types) + +template<class Args, class SigArgs> +class deduce_non_ref_argument_types { + typedef typename deduce_non_ref_argument_types_<Args, SigArgs>::type t1; +public: + typedef typename detail::IF< + has_null_type<t1>::value, null_type, t1 + >::RET type; +}; + +template <int N, class Args, class SigArgs> +struct nth_return_type_sig { + typedef typename + as_lambda_functor< + typename boost::tuples::element<N, Args>::type + // typename tuple_element_as_reference<N, Args>::type + >::type lf_type; + + typedef typename lf_type::inherited::template sig<SigArgs>::type type; +}; + +template<int N, class Tuple> struct element_or_null { + typedef typename boost::tuples::element<N, Tuple>::type type; +}; + +template<int N> struct element_or_null<N, null_type> { + typedef null_type type; +}; + + + + +} // end detail + + // -- lambda_functor base --------------------- + +// the explicit_return_type_action case ----------------------------------- +template<class RET, class Args> +class lambda_functor_base<explicit_return_type_action<RET>, Args> +{ +public: + Args args; + + typedef RET result_type; + + explicit lambda_functor_base(const Args& a) : args(a) {} + + template <class SigArgs> struct sig { typedef RET type; }; + + template<class RET_, CALL_TEMPLATE_ARGS> + RET call(CALL_FORMAL_ARGS) const + { + return detail::constify_rvals<RET>::go( + detail::r_select<RET>::go(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS)); + } +}; + +// the protect_action case ----------------------------------- +template<class Args> +class lambda_functor_base<protect_action, Args> +{ +public: + Args args; +public: + + explicit lambda_functor_base(const Args& a) : args(a) {} + + + template<class RET, CALL_TEMPLATE_ARGS> + RET call(CALL_FORMAL_ARGS) const + { + CALL_USE_ARGS; + return boost::tuples::get<0>(args); + } + + template<class SigArgs> struct sig { + // typedef typename detail::tuple_element_as_reference<0, SigArgs>::type type; + typedef typename boost::tuples::element<0, Args>::type type; + }; +}; + +// Do nothing -------------------------------------------------------- +class do_nothing_action {}; + +template<class Args> +class lambda_functor_base<do_nothing_action, Args> { + // Args args; +public: + // explicit lambda_functor_base(const Args& a) {} + lambda_functor_base() {} + + + template<class RET, CALL_TEMPLATE_ARGS> RET call(CALL_FORMAL_ARGS) const { + return CALL_USE_ARGS; + } + + template<class SigArgs> struct sig { typedef void type; }; +}; + + +// These specializations provide a shorter notation to define actions. +// These lambda_functor_base instances take care of the recursive evaluation +// of the arguments and pass the evaluated arguments to the apply function +// of an action class. To make action X work with these classes, one must +// instantiate the lambda_functor_base as: +// lambda_functor_base<action<ARITY, X>, Args> +// Where ARITY is the arity of the apply function in X + +// The return type is queried as: +// return_type_N<X, EvaluatedArgumentTypes>::type +// for which there must be a specialization. + +// Function actions, casts, throws,... all go via these classes. + + +template<class Act, class Args> +class lambda_functor_base<action<0, Act>, Args> +{ +public: +// Args args; not needed + explicit lambda_functor_base(const Args& /*a*/) {} + + template<class SigArgs> struct sig { + typedef typename return_type_N<Act, null_type>::type type; + }; + + template<class RET, CALL_TEMPLATE_ARGS> + RET call(CALL_FORMAL_ARGS) const { + CALL_USE_ARGS; + return Act::template apply<RET>(); + } +}; + + +#if defined BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART +#error "Multiple defines of BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART" +#endif + + +#define BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(ARITY) \ +template<class Act, class Args> \ +class lambda_functor_base<action<ARITY, Act>, Args> \ +{ \ +public: \ + Args args; \ + \ + explicit lambda_functor_base(const Args& a) : args(a) {} \ + \ + template<class SigArgs> struct sig { \ + typedef typename \ + detail::deduce_argument_types<Args, SigArgs>::type rets_t; \ + public: \ + typedef typename \ + return_type_N_prot<Act, rets_t>::type type; \ + }; \ + \ + \ + template<class RET, CALL_TEMPLATE_ARGS> \ + RET call(CALL_FORMAL_ARGS) const { \ + using boost::tuples::get; \ + using detail::constify_rvals; \ + using detail::r_select; \ + using detail::element_or_null; \ + using detail::deduce_argument_types; + +BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(1) + + typedef typename + deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t; + typedef typename element_or_null<0, rets_t>::type rt0; + + return Act::template apply<RET>( + constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)) + ); + } +}; + + +BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(2) + + typedef typename + deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t; + typedef typename element_or_null<0, rets_t>::type rt0; + typedef typename element_or_null<1, rets_t>::type rt1; + + return Act::template apply<RET>( + constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)) + ); + } +}; + +BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(3) + + typedef typename + deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t; + + typedef typename element_or_null<0, rets_t>::type rt0; + typedef typename element_or_null<1, rets_t>::type rt1; + typedef typename element_or_null<2, rets_t>::type rt2; + + return Act::template apply<RET>( + constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)) + ); + } +}; + +BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(4) + typedef typename + deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t; + typedef typename element_or_null<0, rets_t>::type rt0; + typedef typename element_or_null<1, rets_t>::type rt1; + typedef typename element_or_null<2, rets_t>::type rt2; + typedef typename element_or_null<3, rets_t>::type rt3; + + return Act::template apply<RET>( + constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS)) + ); + } +}; + +BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(5) + typedef typename + deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t; + typedef typename element_or_null<0, rets_t>::type rt0; + typedef typename element_or_null<1, rets_t>::type rt1; + typedef typename element_or_null<2, rets_t>::type rt2; + typedef typename element_or_null<3, rets_t>::type rt3; + typedef typename element_or_null<4, rets_t>::type rt4; + + return Act::template apply<RET>( + constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt4>::go(r_select<rt4>::go(get<4>(args), CALL_ACTUAL_ARGS)) + ); + } +}; + +BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(6) + + typedef typename + deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t; + typedef typename element_or_null<0, rets_t>::type rt0; + typedef typename element_or_null<1, rets_t>::type rt1; + typedef typename element_or_null<2, rets_t>::type rt2; + typedef typename element_or_null<3, rets_t>::type rt3; + typedef typename element_or_null<4, rets_t>::type rt4; + typedef typename element_or_null<5, rets_t>::type rt5; + + + return Act::template apply<RET>( + constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt4>::go(r_select<rt4>::go(get<4>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt5>::go(r_select<rt5>::go(get<5>(args), CALL_ACTUAL_ARGS)) + ); + } +}; + +BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(7) + typedef typename + deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t; + typedef typename element_or_null<0, rets_t>::type rt0; + typedef typename element_or_null<1, rets_t>::type rt1; + typedef typename element_or_null<2, rets_t>::type rt2; + typedef typename element_or_null<3, rets_t>::type rt3; + typedef typename element_or_null<4, rets_t>::type rt4; + typedef typename element_or_null<5, rets_t>::type rt5; + typedef typename element_or_null<6, rets_t>::type rt6; + + + return Act::template apply<RET>( + constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt4>::go(r_select<rt4>::go(get<4>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt5>::go(r_select<rt5>::go(get<5>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt6>::go(r_select<rt6>::go(get<6>(args), CALL_ACTUAL_ARGS)) + ); + } +}; + +BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(8) + typedef typename + deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t; + typedef typename element_or_null<0, rets_t>::type rt0; + typedef typename element_or_null<1, rets_t>::type rt1; + typedef typename element_or_null<2, rets_t>::type rt2; + typedef typename element_or_null<3, rets_t>::type rt3; + typedef typename element_or_null<4, rets_t>::type rt4; + typedef typename element_or_null<5, rets_t>::type rt5; + typedef typename element_or_null<6, rets_t>::type rt6; + typedef typename element_or_null<7, rets_t>::type rt7; + + return Act::template apply<RET>( + constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt4>::go(r_select<rt4>::go(get<4>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt5>::go(r_select<rt5>::go(get<5>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt6>::go(r_select<rt6>::go(get<6>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt7>::go(r_select<rt7>::go(get<7>(args), CALL_ACTUAL_ARGS)) + ); + } +}; + +BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(9) + typedef typename + deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t; + typedef typename element_or_null<0, rets_t>::type rt0; + typedef typename element_or_null<1, rets_t>::type rt1; + typedef typename element_or_null<2, rets_t>::type rt2; + typedef typename element_or_null<3, rets_t>::type rt3; + typedef typename element_or_null<4, rets_t>::type rt4; + typedef typename element_or_null<5, rets_t>::type rt5; + typedef typename element_or_null<6, rets_t>::type rt6; + typedef typename element_or_null<7, rets_t>::type rt7; + typedef typename element_or_null<8, rets_t>::type rt8; + + return Act::template apply<RET>( + constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt4>::go(r_select<rt4>::go(get<4>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt5>::go(r_select<rt5>::go(get<5>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt6>::go(r_select<rt6>::go(get<6>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt7>::go(r_select<rt7>::go(get<7>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt8>::go(r_select<rt8>::go(get<8>(args), CALL_ACTUAL_ARGS)) + ); + } +}; + +BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(10) + typedef typename + deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t; + typedef typename element_or_null<0, rets_t>::type rt0; + typedef typename element_or_null<1, rets_t>::type rt1; + typedef typename element_or_null<2, rets_t>::type rt2; + typedef typename element_or_null<3, rets_t>::type rt3; + typedef typename element_or_null<4, rets_t>::type rt4; + typedef typename element_or_null<5, rets_t>::type rt5; + typedef typename element_or_null<6, rets_t>::type rt6; + typedef typename element_or_null<7, rets_t>::type rt7; + typedef typename element_or_null<8, rets_t>::type rt8; + typedef typename element_or_null<9, rets_t>::type rt9; + + return Act::template apply<RET>( + constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt4>::go(r_select<rt4>::go(get<4>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt5>::go(r_select<rt5>::go(get<5>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt6>::go(r_select<rt6>::go(get<6>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt7>::go(r_select<rt7>::go(get<7>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt8>::go(r_select<rt8>::go(get<8>(args), CALL_ACTUAL_ARGS)), + constify_rvals<rt9>::go(r_select<rt9>::go(get<9>(args), CALL_ACTUAL_ARGS)) + ); + } +}; + +#undef BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART + + +} // namespace lambda +} // namespace boost + +#endif |