/*============================================================================== 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 #include #include #include #include #include #include #ifdef BOOST_PHOENIX_NO_VARIADIC_EXPRESSION # include #else BOOST_PHOENIX_DEFINE_EXPRESSION_VARARG( (boost)(phoenix)(construct) , (proto::terminal >) (meta_grammar) , _ ) #endif namespace boost { namespace phoenix { struct construct_eval { template struct result; #if defined(BOOST_PHOENIX_NO_VARIADIC_OBJECT) template struct result : detail::result_of::target { }; template typename detail::result_of::target::type operator()(Target, Context const &) const { return typename detail::result_of::target::type(); } // Bring in the rest #include #else // TODO: #endif }; template struct default_actions::when : call {}; #if defined(BOOST_PHOENIX_NO_VARIADIC_OBJECT) template inline typename expression::construct >::type const construct() { return expression:: construct >:: make(detail::target()); } // Bring in the rest #include #else // TODO: #endif }} #endif