84 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			84 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | /*============================================================================== | ||
|  |     Copyright (c) 2001-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) | ||
|  | ==============================================================================*/ | ||
|  | #ifndef BOOST_PHOENIX_OBJECT_CONSTRUCT_HPP | ||
|  | #define BOOST_PHOENIX_OBJECT_CONSTRUCT_HPP | ||
|  | 
 | ||
|  | #include <boost/phoenix/core/limits.hpp> | ||
|  | #include <boost/phoenix/core/call.hpp> | ||
|  | #include <boost/phoenix/core/expression.hpp> | ||
|  | #include <boost/phoenix/core/meta_grammar.hpp> | ||
|  | #include <boost/phoenix/object/detail/target.hpp> | ||
|  | #include <boost/phoenix/support/iterate.hpp> | ||
|  | #include <boost/preprocessor/repetition/repeat_from_to.hpp> | ||
|  | 
 | ||
|  | #ifdef BOOST_PHOENIX_NO_VARIADIC_EXPRESSION | ||
|  | #   include <boost/phoenix/object/detail/cpp03/construct_expr.hpp> | ||
|  | #else | ||
|  | BOOST_PHOENIX_DEFINE_EXPRESSION_VARARG( | ||
|  |     (boost)(phoenix)(construct) | ||
|  |   , (proto::terminal<detail::target<proto::_> >) | ||
|  |     (meta_grammar) | ||
|  |   , _ | ||
|  | ) | ||
|  | #endif | ||
|  | 
 | ||
|  | namespace boost { namespace phoenix | ||
|  | { | ||
|  |     struct construct_eval | ||
|  |     { | ||
|  |         template <typename Sig> | ||
|  |         struct result; | ||
|  | 
 | ||
|  | #if defined(BOOST_PHOENIX_NO_VARIADIC_OBJECT) | ||
|  |         template <typename This, typename A0, typename Context> | ||
|  |         struct result<This(A0, Context)> | ||
|  |             : detail::result_of::target<A0> | ||
|  |         { | ||
|  |         }; | ||
|  | 
 | ||
|  |         template <typename Target, typename Context> | ||
|  |         typename detail::result_of::target<Target>::type | ||
|  |         operator()(Target, Context const &) const | ||
|  |         { | ||
|  |             return typename detail::result_of::target<Target>::type(); | ||
|  |         } | ||
|  | 
 | ||
|  |         // Bring in the rest | ||
|  |         #include <boost/phoenix/object/detail/cpp03/construct_eval.hpp> | ||
|  | #else | ||
|  |         // TODO: | ||
|  | #endif | ||
|  |     }; | ||
|  | 
 | ||
|  |     template <typename Dummy> | ||
|  |     struct default_actions::when<rule::construct, Dummy> | ||
|  |         : call<construct_eval, Dummy> | ||
|  |     {}; | ||
|  | 
 | ||
|  | #if defined(BOOST_PHOENIX_NO_VARIADIC_OBJECT) | ||
|  |     template <typename T> | ||
|  |     inline | ||
|  |     typename expression::construct<detail::target<T> >::type const | ||
|  |     construct() | ||
|  |     { | ||
|  |         return | ||
|  |             expression:: | ||
|  |                 construct<detail::target<T> >:: | ||
|  |                     make(detail::target<T>()); | ||
|  |     } | ||
|  | 
 | ||
|  |     // Bring in the rest | ||
|  |     #include <boost/phoenix/object/detail/cpp03/construct.hpp> | ||
|  | #else | ||
|  |     // TODO: | ||
|  | #endif | ||
|  | }} | ||
|  | 
 | ||
|  | #endif | ||
|  | 
 |