125 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| #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
 | 
