#if !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES) #ifndef BOOST_PHOENIX_CORE_DETAIL_CALL_HPP #define BOOST_PHOENIX_CORE_DETAIL_CALL_HPP #include #endif #else #if !BOOST_PHOENIX_IS_ITERATING #ifndef BOOST_PHOENIX_CORE_DETAIL_CALL_HPP #define BOOST_PHOENIX_CORE_DETAIL_CALL_HPP #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 2, line: 0, output: "preprocessed/call_" BOOST_PHOENIX_LIMIT_STR ".hpp") #endif /*============================================================================== Copyright (c) 2005-2010 Joel de Guzman Copyright (c) 2010 Thomas Heller 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) ==============================================================================*/ #include #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES) #pragma wave option(preserve: 1) #endif #define M0(Z, N ,D) \ typedef \ typename proto::result_of::child_c::type \ BOOST_PP_CAT(A, N); \ /**/ #define M1(Z, N ,D) \ BOOST_PP_COMMA_IF(N) proto::child_c(e) /**/ #define BOOST_PHOENIX_ITERATION_PARAMS \ (3, (1, BOOST_PHOENIX_LIMIT, \ )) #include BOOST_PHOENIX_ITERATE() #undef M0 #undef M1 #if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES) #pragma wave option(output: null) #endif #endif #else template struct call_impl : proto::transform_impl { typedef typename boost::phoenix::result_of::context::type context_type; BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, M0, _) typedef typename boost::result_of< Fun(BOOST_PHOENIX_A, context_type) >::type result_type; result_type operator()( typename call_impl::expr_param e , typename call_impl::state_param s , typename call_impl::data_param d ) const { return Fun()( BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, M1, _) , boost::phoenix::context(s, d) ); } }; #endif #endif // BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES