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
 | 
						|
 |