| /*============================================================================= |
| Copyright (c) 2011 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) |
| ==============================================================================*/ |
| #ifndef BOOST_PHOENIX_CORE_V2_EVAL_HPP |
| #define BOOST_PHOENIX_CORE_V2_EVAL_HPP |
| |
| #include <boost/phoenix/core/limits.hpp> |
| #include <boost/phoenix/core/environment.hpp> |
| #include <boost/phoenix/core/is_actor.hpp> |
| #include <boost/phoenix/core/meta_grammar.hpp> |
| #include <boost/phoenix/core/terminal_fwd.hpp> |
| #include <boost/phoenix/support/vector.hpp> |
| #include <boost/proto/transform/fold.hpp> |
| #include <boost/proto/transform/lazy.hpp> |
| |
| namespace boost { namespace phoenix |
| { |
| struct v2_eval |
| : proto::callable |
| { |
| template <typename Sig> |
| struct result; |
| |
| template <typename This, typename Eval, typename Env> |
| struct result<This(Eval, Env)> |
| : Eval::template result<typename proto::detail::uncvref<Env>::type> |
| {}; |
| |
| template <typename This, typename Eval, typename Env> |
| struct result<This(Eval &, Env)> |
| : Eval::template result<typename proto::detail::uncvref<Env>::type> |
| {}; |
| |
| template <typename This, typename Eval, typename Env> |
| struct result<This(Eval const &, Env)> |
| : Eval::template result<typename proto::detail::uncvref<Env>::type> |
| {}; |
| |
| template <typename Eval, typename Env> |
| typename result<v2_eval(Eval const&, Env)>::type |
| operator()(Eval const & e, Env const & env) const |
| { |
| return e.eval(env); |
| } |
| }; |
| }} |
| |
| #endif |