52 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			52 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | /*============================================================================= | ||
|  |     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 |