/*============================================================================== 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_NEW_HPP #define BOOST_PHOENIX_OBJECT_NEW_HPP #include #include #include #include #include #include #include BOOST_PHOENIX_DEFINE_EXPRESSION_VARARG( (boost)(phoenix)(new_) , (proto::terminal >) (meta_grammar) , BOOST_PHOENIX_COMPOSITE_LIMIT ) namespace boost { namespace phoenix { struct new_eval { template struct result; template struct result { typedef typename detail::result_of::target target_type; typedef typename target_type::type * type; }; template typename detail::result_of::target::type * operator()(Target, Context const &) const { return new typename detail::result_of::target::type; } // Bring in the rest #include }; template struct default_actions::when : call {}; template inline typename expression::new_ >::type const new_() { return expression:: new_ >:: make(detail::target()); } // Bring in the rest #include }} #endif