1 /*============================================================================= 2 Copyright (c) 2011 Thomas Heller 3 4 Distributed under the Boost Software License, Version 1.0. (See accompanying 5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 ==============================================================================*/ 7 #ifndef BOOST_PHOENIX_CORE_V2_EVAL_HPP 8 #define BOOST_PHOENIX_CORE_V2_EVAL_HPP 9 10 #include <boost/phoenix/core/limits.hpp> 11 #include <boost/phoenix/core/environment.hpp> 12 #include <boost/phoenix/core/is_actor.hpp> 13 #include <boost/phoenix/core/meta_grammar.hpp> 14 #include <boost/phoenix/core/terminal_fwd.hpp> 15 #include <boost/phoenix/support/vector.hpp> 16 #include <boost/proto/transform/fold.hpp> 17 #include <boost/proto/transform/lazy.hpp> 18 19 namespace boost { namespace phoenix 20 { 21 struct v2_eval 22 : proto::callable 23 { 24 template <typename Sig> 25 struct result; 26 27 template <typename This, typename Eval, typename Env> 28 struct result<This(Eval, Env)> 29 : Eval::template result<typename proto::detail::uncvref<Env>::type> 30 {}; 31 32 template <typename This, typename Eval, typename Env> 33 struct result<This(Eval &, Env)> 34 : Eval::template result<typename proto::detail::uncvref<Env>::type> 35 {}; 36 37 template <typename This, typename Eval, typename Env> 38 struct result<This(Eval const &, Env)> 39 : Eval::template result<typename proto::detail::uncvref<Env>::type> 40 {}; 41 42 template <typename Eval, typename Env> 43 typename result<v2_eval(Eval const&, Env)>::type operator ()boost::phoenix::v2_eval44 operator()(Eval const & e, Env const & env) const 45 { 46 return e.eval(env); 47 } 48 }; 49 }} 50 51 #endif 52