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 |