comparison DEPENDENCIES/generic/include/boost/phoenix/object/new.hpp @ 16:2665513ce2d3

Add boost headers
author Chris Cannam
date Tue, 05 Aug 2014 11:11:38 +0100
parents
children
comparison
equal deleted inserted replaced
15:663ca0da4350 16:2665513ce2d3
1 /*==============================================================================
2 Copyright (c) 2001-2010 Joel de Guzman
3 Copyright (c) 2010 Thomas Heller
4
5 Distributed under the Boost Software License, Version 1.0. (See accompanying
6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 ==============================================================================*/
8 #ifndef BOOST_PHOENIX_OBJECT_NEW_HPP
9 #define BOOST_PHOENIX_OBJECT_NEW_HPP
10
11 #include <boost/phoenix/core/limits.hpp>
12 #include <boost/phoenix/core/expression.hpp>
13 #include <boost/phoenix/core/meta_grammar.hpp>
14 #include <boost/phoenix/core/call.hpp>
15 #include <boost/phoenix/object/detail/target.hpp>
16 #include <boost/phoenix/support/iterate.hpp>
17 #include <boost/preprocessor/repetition/repeat_from_to.hpp>
18
19 BOOST_PHOENIX_DEFINE_EXPRESSION_VARARG(
20 (boost)(phoenix)(new_)
21 , (proto::terminal<detail::target<proto::_> >)
22 (meta_grammar)
23 , BOOST_PHOENIX_COMPOSITE_LIMIT
24 )
25
26 namespace boost { namespace phoenix
27 {
28 struct new_eval
29 {
30 template <typename Sig>
31 struct result;
32
33 template <typename This, typename A0, typename Context>
34 struct result<This(A0, Context)>
35 {
36 typedef typename detail::result_of::target<A0> target_type;
37 typedef typename target_type::type * type;
38 };
39
40 template <typename Target, typename Context>
41 typename detail::result_of::target<Target>::type *
42 operator()(Target, Context const &) const
43 {
44 return new typename detail::result_of::target<Target>::type;
45 }
46
47 // Bring in the rest
48 #include <boost/phoenix/object/detail/new_eval.hpp>
49 };
50
51 template <typename Dummy>
52 struct default_actions::when<rule::new_, Dummy>
53 : call<new_eval, Dummy>
54 {};
55
56 template <typename T>
57 inline
58 typename expression::new_<detail::target<T> >::type const
59 new_()
60 {
61 return
62 expression::
63 new_<detail::target<T> >::
64 make(detail::target<T>());
65 }
66
67 // Bring in the rest
68 #include <boost/phoenix/object/detail/new.hpp>
69 }}
70
71 #endif
72