123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- #if !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES)
- #include <boost/phoenix/core/detail/cpp03/preprocessed/function_eval.hpp>
- #else
- #if !BOOST_PHOENIX_IS_ITERATING
- #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
- #pragma wave option(preserve: 2, line: 0, output: "preprocessed/function_eval_" BOOST_PHOENIX_LIMIT_STR ".hpp")
- #endif
- /*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
- 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)
- ==============================================================================*/
- #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
- #pragma wave option(preserve: 1)
- #endif
- #define PHOENIX_GET_ARG(z, n, data) \
- typedef \
- typename boost::add_reference< \
- typename boost::add_const< \
- typename boost::result_of< \
- boost::phoenix::evaluator( \
- BOOST_PP_CAT(A, n) \
- , Context \
- ) \
- >::type \
- >::type \
- >::type \
- BOOST_PP_CAT(a, n);
- #define PHOENIX_EVAL_ARG(z, n, data) \
- help_rvalue_deduction(boost::phoenix::eval(BOOST_PP_CAT(a, n), ctx))
-
- #define M0(z, n, data) \
- typename proto::detail::uncvref<BOOST_PP_CAT(a, n)>::type
- #define BOOST_PHOENIX_ITERATION_PARAMS \
- (3, (1, BOOST_PP_DEC(BOOST_PHOENIX_ACTOR_LIMIT), \
- <boost/phoenix/core/detail/cpp03/function_eval.hpp>))
- #include BOOST_PHOENIX_ITERATE()
- #undef PHOENIX_GET_ARG
- #undef PHOENIX_EVAL_ARG
- #undef M0
- #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
- #pragma wave option(output: null)
- #endif
- #else
- template <
- typename This
- , typename F
- , BOOST_PHOENIX_typename_A
- , typename Context
- >
- struct result<This(F, BOOST_PHOENIX_A, Context)>
- {
- typedef typename
- remove_reference<
- typename boost::result_of<evaluator(F, Context)>::type
- >::type
- fn;
- BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, PHOENIX_GET_ARG, _)
- typedef typename
- boost::result_of<fn(BOOST_PHOENIX_a)>::type
- type;
- /*
- typedef typename
- mpl::eval_if_c<
- has_phx2_result<
- fn
- , BOOST_PP_ENUM(BOOST_PHOENIX_ITERATION, M0, _)
- >::value
- , boost::result_of<
- fn(
- BOOST_PHOENIX_a
- )
- >
- , phx2_result<
- fn
- , BOOST_PHOENIX_a
- >
- >::type
- type;
- */
- };
- template <typename F, BOOST_PHOENIX_typename_A, typename Context>
- typename result<
- function_eval(
- F const &
- , BOOST_PHOENIX_A_ref
- , Context const &
- )
- >::type
- operator()(F const & f, BOOST_PHOENIX_A_ref_a, Context const & ctx) const
- {
- return boost::phoenix::eval(f, ctx)(BOOST_PP_ENUM(BOOST_PHOENIX_ITERATION, PHOENIX_EVAL_ARG, _));
- }
- template <typename F, BOOST_PHOENIX_typename_A, typename Context>
- typename result<
- function_eval(
- F &
- , BOOST_PHOENIX_A_ref
- , Context const &
- )
- >::type
- operator()(F & f, BOOST_PHOENIX_A_ref_a, Context const & ctx) const
- {
- return boost::phoenix::eval(f, ctx)(BOOST_PP_ENUM(BOOST_PHOENIX_ITERATION, PHOENIX_EVAL_ARG, _));
- }
- #endif
- #endif
|