Chris@16
|
1 ///////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
2 /// \file make_expr_.hpp
|
Chris@16
|
3 /// Contains definition of make_expr_\<\> class template.
|
Chris@16
|
4 //
|
Chris@16
|
5 // Copyright 2008 Eric Niebler. Distributed under the Boost
|
Chris@16
|
6 // Software License, Version 1.0. (See accompanying file
|
Chris@16
|
7 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
8 template<
|
Chris@16
|
9 typename Tag
|
Chris@16
|
10 , typename Domain
|
Chris@16
|
11 , typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void , typename A9 = void
|
Chris@16
|
12 , typename _ = void
|
Chris@16
|
13 >
|
Chris@16
|
14 struct make_expr_
|
Chris@16
|
15 {};
|
Chris@16
|
16 template<typename Domain, typename A>
|
Chris@16
|
17 struct make_expr_<tag::terminal, Domain, A
|
Chris@16
|
18 , void , void , void , void , void , void , void , void , void , void>
|
Chris@16
|
19 {
|
Chris@16
|
20 typedef typename proto::detail::protoify<A, Domain>::result_type result_type;
|
Chris@16
|
21 BOOST_FORCEINLINE
|
Chris@16
|
22 result_type operator()(typename add_reference<A>::type a) const
|
Chris@16
|
23 {
|
Chris@16
|
24 return proto::detail::protoify<A, Domain>()(a);
|
Chris@16
|
25 }
|
Chris@16
|
26 };
|
Chris@16
|
27 template<typename A>
|
Chris@16
|
28 struct make_expr_<tag::terminal, deduce_domain, A
|
Chris@16
|
29 , void , void , void , void , void , void , void , void , void , void>
|
Chris@16
|
30 : make_expr_<tag::terminal, default_domain, A>
|
Chris@16
|
31 {};
|
Chris@16
|
32 template<typename Tag, typename Domain , typename A0>
|
Chris@16
|
33 struct make_expr_<Tag, Domain , A0
|
Chris@16
|
34 , void , void , void , void , void , void , void , void , void, void>
|
Chris@16
|
35 {
|
Chris@16
|
36 typedef
|
Chris@16
|
37 list1<
|
Chris@16
|
38 typename boost::proto::detail::protoify< A0 , Domain >::result_type
|
Chris@16
|
39 >
|
Chris@16
|
40 proto_args;
|
Chris@16
|
41 typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
|
Chris@16
|
42 typedef typename Domain::proto_generator proto_generator;
|
Chris@16
|
43 typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
|
Chris@16
|
44 BOOST_FORCEINLINE
|
Chris@16
|
45 result_type operator()(typename add_reference<A0 >::type a0) const
|
Chris@16
|
46 {
|
Chris@16
|
47 expr_type const that = {
|
Chris@16
|
48 boost::proto::detail::protoify< A0 , Domain >()(a0)
|
Chris@16
|
49 };
|
Chris@16
|
50 return proto_generator()(that);
|
Chris@16
|
51 }
|
Chris@16
|
52 };
|
Chris@16
|
53 template<typename Tag , typename A0>
|
Chris@16
|
54 struct make_expr_<Tag, deduce_domain , A0
|
Chris@16
|
55 , void , void , void , void , void , void , void , void , void, void>
|
Chris@16
|
56 : make_expr_<
|
Chris@16
|
57 Tag
|
Chris@16
|
58 , typename deduce_domain1<A0>::type
|
Chris@16
|
59 , A0
|
Chris@16
|
60 >
|
Chris@16
|
61 {};
|
Chris@16
|
62 template<typename Tag, typename Domain , typename A0 , typename A1>
|
Chris@16
|
63 struct make_expr_<Tag, Domain , A0 , A1
|
Chris@16
|
64 , void , void , void , void , void , void , void , void, void>
|
Chris@16
|
65 {
|
Chris@16
|
66 typedef
|
Chris@16
|
67 list2<
|
Chris@16
|
68 typename boost::proto::detail::protoify< A0 , Domain >::result_type , typename boost::proto::detail::protoify< A1 , Domain >::result_type
|
Chris@16
|
69 >
|
Chris@16
|
70 proto_args;
|
Chris@16
|
71 typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
|
Chris@16
|
72 typedef typename Domain::proto_generator proto_generator;
|
Chris@16
|
73 typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
|
Chris@16
|
74 BOOST_FORCEINLINE
|
Chris@16
|
75 result_type operator()(typename add_reference<A0 >::type a0 , typename add_reference<A1 >::type a1) const
|
Chris@16
|
76 {
|
Chris@16
|
77 expr_type const that = {
|
Chris@16
|
78 boost::proto::detail::protoify< A0 , Domain >()(a0) , boost::proto::detail::protoify< A1 , Domain >()(a1)
|
Chris@16
|
79 };
|
Chris@16
|
80 return proto_generator()(that);
|
Chris@16
|
81 }
|
Chris@16
|
82 };
|
Chris@16
|
83 template<typename Tag , typename A0 , typename A1>
|
Chris@16
|
84 struct make_expr_<Tag, deduce_domain , A0 , A1
|
Chris@16
|
85 , void , void , void , void , void , void , void , void, void>
|
Chris@16
|
86 : make_expr_<
|
Chris@16
|
87 Tag
|
Chris@16
|
88 , typename deduce_domain2<A0 , A1>::type
|
Chris@16
|
89 , A0 , A1
|
Chris@16
|
90 >
|
Chris@16
|
91 {};
|
Chris@16
|
92 template<typename Tag, typename Domain , typename A0 , typename A1 , typename A2>
|
Chris@16
|
93 struct make_expr_<Tag, Domain , A0 , A1 , A2
|
Chris@16
|
94 , void , void , void , void , void , void , void, void>
|
Chris@16
|
95 {
|
Chris@16
|
96 typedef
|
Chris@16
|
97 list3<
|
Chris@16
|
98 typename boost::proto::detail::protoify< A0 , Domain >::result_type , typename boost::proto::detail::protoify< A1 , Domain >::result_type , typename boost::proto::detail::protoify< A2 , Domain >::result_type
|
Chris@16
|
99 >
|
Chris@16
|
100 proto_args;
|
Chris@16
|
101 typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
|
Chris@16
|
102 typedef typename Domain::proto_generator proto_generator;
|
Chris@16
|
103 typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
|
Chris@16
|
104 BOOST_FORCEINLINE
|
Chris@16
|
105 result_type operator()(typename add_reference<A0 >::type a0 , typename add_reference<A1 >::type a1 , typename add_reference<A2 >::type a2) const
|
Chris@16
|
106 {
|
Chris@16
|
107 expr_type const that = {
|
Chris@16
|
108 boost::proto::detail::protoify< A0 , Domain >()(a0) , boost::proto::detail::protoify< A1 , Domain >()(a1) , boost::proto::detail::protoify< A2 , Domain >()(a2)
|
Chris@16
|
109 };
|
Chris@16
|
110 return proto_generator()(that);
|
Chris@16
|
111 }
|
Chris@16
|
112 };
|
Chris@16
|
113 template<typename Tag , typename A0 , typename A1 , typename A2>
|
Chris@16
|
114 struct make_expr_<Tag, deduce_domain , A0 , A1 , A2
|
Chris@16
|
115 , void , void , void , void , void , void , void, void>
|
Chris@16
|
116 : make_expr_<
|
Chris@16
|
117 Tag
|
Chris@16
|
118 , typename deduce_domain3<A0 , A1 , A2>::type
|
Chris@16
|
119 , A0 , A1 , A2
|
Chris@16
|
120 >
|
Chris@16
|
121 {};
|
Chris@16
|
122 template<typename Tag, typename Domain , typename A0 , typename A1 , typename A2 , typename A3>
|
Chris@16
|
123 struct make_expr_<Tag, Domain , A0 , A1 , A2 , A3
|
Chris@16
|
124 , void , void , void , void , void , void, void>
|
Chris@16
|
125 {
|
Chris@16
|
126 typedef
|
Chris@16
|
127 list4<
|
Chris@16
|
128 typename boost::proto::detail::protoify< A0 , Domain >::result_type , typename boost::proto::detail::protoify< A1 , Domain >::result_type , typename boost::proto::detail::protoify< A2 , Domain >::result_type , typename boost::proto::detail::protoify< A3 , Domain >::result_type
|
Chris@16
|
129 >
|
Chris@16
|
130 proto_args;
|
Chris@16
|
131 typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
|
Chris@16
|
132 typedef typename Domain::proto_generator proto_generator;
|
Chris@16
|
133 typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
|
Chris@16
|
134 BOOST_FORCEINLINE
|
Chris@16
|
135 result_type operator()(typename add_reference<A0 >::type a0 , typename add_reference<A1 >::type a1 , typename add_reference<A2 >::type a2 , typename add_reference<A3 >::type a3) const
|
Chris@16
|
136 {
|
Chris@16
|
137 expr_type const that = {
|
Chris@16
|
138 boost::proto::detail::protoify< A0 , Domain >()(a0) , boost::proto::detail::protoify< A1 , Domain >()(a1) , boost::proto::detail::protoify< A2 , Domain >()(a2) , boost::proto::detail::protoify< A3 , Domain >()(a3)
|
Chris@16
|
139 };
|
Chris@16
|
140 return proto_generator()(that);
|
Chris@16
|
141 }
|
Chris@16
|
142 };
|
Chris@16
|
143 template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3>
|
Chris@16
|
144 struct make_expr_<Tag, deduce_domain , A0 , A1 , A2 , A3
|
Chris@16
|
145 , void , void , void , void , void , void, void>
|
Chris@16
|
146 : make_expr_<
|
Chris@16
|
147 Tag
|
Chris@16
|
148 , typename deduce_domain4<A0 , A1 , A2 , A3>::type
|
Chris@16
|
149 , A0 , A1 , A2 , A3
|
Chris@16
|
150 >
|
Chris@16
|
151 {};
|
Chris@16
|
152 template<typename Tag, typename Domain , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
|
Chris@16
|
153 struct make_expr_<Tag, Domain , A0 , A1 , A2 , A3 , A4
|
Chris@16
|
154 , void , void , void , void , void, void>
|
Chris@16
|
155 {
|
Chris@16
|
156 typedef
|
Chris@16
|
157 list5<
|
Chris@16
|
158 typename boost::proto::detail::protoify< A0 , Domain >::result_type , typename boost::proto::detail::protoify< A1 , Domain >::result_type , typename boost::proto::detail::protoify< A2 , Domain >::result_type , typename boost::proto::detail::protoify< A3 , Domain >::result_type , typename boost::proto::detail::protoify< A4 , Domain >::result_type
|
Chris@16
|
159 >
|
Chris@16
|
160 proto_args;
|
Chris@16
|
161 typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
|
Chris@16
|
162 typedef typename Domain::proto_generator proto_generator;
|
Chris@16
|
163 typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
|
Chris@16
|
164 BOOST_FORCEINLINE
|
Chris@16
|
165 result_type operator()(typename add_reference<A0 >::type a0 , typename add_reference<A1 >::type a1 , typename add_reference<A2 >::type a2 , typename add_reference<A3 >::type a3 , typename add_reference<A4 >::type a4) const
|
Chris@16
|
166 {
|
Chris@16
|
167 expr_type const that = {
|
Chris@16
|
168 boost::proto::detail::protoify< A0 , Domain >()(a0) , boost::proto::detail::protoify< A1 , Domain >()(a1) , boost::proto::detail::protoify< A2 , Domain >()(a2) , boost::proto::detail::protoify< A3 , Domain >()(a3) , boost::proto::detail::protoify< A4 , Domain >()(a4)
|
Chris@16
|
169 };
|
Chris@16
|
170 return proto_generator()(that);
|
Chris@16
|
171 }
|
Chris@16
|
172 };
|
Chris@16
|
173 template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
|
Chris@16
|
174 struct make_expr_<Tag, deduce_domain , A0 , A1 , A2 , A3 , A4
|
Chris@16
|
175 , void , void , void , void , void, void>
|
Chris@16
|
176 : make_expr_<
|
Chris@16
|
177 Tag
|
Chris@16
|
178 , typename deduce_domain5<A0 , A1 , A2 , A3 , A4>::type
|
Chris@16
|
179 , A0 , A1 , A2 , A3 , A4
|
Chris@16
|
180 >
|
Chris@16
|
181 {};
|
Chris@16
|
182 template<typename Tag, typename Domain , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
|
Chris@16
|
183 struct make_expr_<Tag, Domain , A0 , A1 , A2 , A3 , A4 , A5
|
Chris@16
|
184 , void , void , void , void, void>
|
Chris@16
|
185 {
|
Chris@16
|
186 typedef
|
Chris@16
|
187 list6<
|
Chris@16
|
188 typename boost::proto::detail::protoify< A0 , Domain >::result_type , typename boost::proto::detail::protoify< A1 , Domain >::result_type , typename boost::proto::detail::protoify< A2 , Domain >::result_type , typename boost::proto::detail::protoify< A3 , Domain >::result_type , typename boost::proto::detail::protoify< A4 , Domain >::result_type , typename boost::proto::detail::protoify< A5 , Domain >::result_type
|
Chris@16
|
189 >
|
Chris@16
|
190 proto_args;
|
Chris@16
|
191 typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
|
Chris@16
|
192 typedef typename Domain::proto_generator proto_generator;
|
Chris@16
|
193 typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
|
Chris@16
|
194 BOOST_FORCEINLINE
|
Chris@16
|
195 result_type operator()(typename add_reference<A0 >::type a0 , typename add_reference<A1 >::type a1 , typename add_reference<A2 >::type a2 , typename add_reference<A3 >::type a3 , typename add_reference<A4 >::type a4 , typename add_reference<A5 >::type a5) const
|
Chris@16
|
196 {
|
Chris@16
|
197 expr_type const that = {
|
Chris@16
|
198 boost::proto::detail::protoify< A0 , Domain >()(a0) , boost::proto::detail::protoify< A1 , Domain >()(a1) , boost::proto::detail::protoify< A2 , Domain >()(a2) , boost::proto::detail::protoify< A3 , Domain >()(a3) , boost::proto::detail::protoify< A4 , Domain >()(a4) , boost::proto::detail::protoify< A5 , Domain >()(a5)
|
Chris@16
|
199 };
|
Chris@16
|
200 return proto_generator()(that);
|
Chris@16
|
201 }
|
Chris@16
|
202 };
|
Chris@16
|
203 template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
|
Chris@16
|
204 struct make_expr_<Tag, deduce_domain , A0 , A1 , A2 , A3 , A4 , A5
|
Chris@16
|
205 , void , void , void , void, void>
|
Chris@16
|
206 : make_expr_<
|
Chris@16
|
207 Tag
|
Chris@16
|
208 , typename deduce_domain6<A0 , A1 , A2 , A3 , A4 , A5>::type
|
Chris@16
|
209 , A0 , A1 , A2 , A3 , A4 , A5
|
Chris@16
|
210 >
|
Chris@16
|
211 {};
|
Chris@16
|
212 template<typename Tag, typename Domain , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
|
Chris@16
|
213 struct make_expr_<Tag, Domain , A0 , A1 , A2 , A3 , A4 , A5 , A6
|
Chris@16
|
214 , void , void , void, void>
|
Chris@16
|
215 {
|
Chris@16
|
216 typedef
|
Chris@16
|
217 list7<
|
Chris@16
|
218 typename boost::proto::detail::protoify< A0 , Domain >::result_type , typename boost::proto::detail::protoify< A1 , Domain >::result_type , typename boost::proto::detail::protoify< A2 , Domain >::result_type , typename boost::proto::detail::protoify< A3 , Domain >::result_type , typename boost::proto::detail::protoify< A4 , Domain >::result_type , typename boost::proto::detail::protoify< A5 , Domain >::result_type , typename boost::proto::detail::protoify< A6 , Domain >::result_type
|
Chris@16
|
219 >
|
Chris@16
|
220 proto_args;
|
Chris@16
|
221 typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
|
Chris@16
|
222 typedef typename Domain::proto_generator proto_generator;
|
Chris@16
|
223 typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
|
Chris@16
|
224 BOOST_FORCEINLINE
|
Chris@16
|
225 result_type operator()(typename add_reference<A0 >::type a0 , typename add_reference<A1 >::type a1 , typename add_reference<A2 >::type a2 , typename add_reference<A3 >::type a3 , typename add_reference<A4 >::type a4 , typename add_reference<A5 >::type a5 , typename add_reference<A6 >::type a6) const
|
Chris@16
|
226 {
|
Chris@16
|
227 expr_type const that = {
|
Chris@16
|
228 boost::proto::detail::protoify< A0 , Domain >()(a0) , boost::proto::detail::protoify< A1 , Domain >()(a1) , boost::proto::detail::protoify< A2 , Domain >()(a2) , boost::proto::detail::protoify< A3 , Domain >()(a3) , boost::proto::detail::protoify< A4 , Domain >()(a4) , boost::proto::detail::protoify< A5 , Domain >()(a5) , boost::proto::detail::protoify< A6 , Domain >()(a6)
|
Chris@16
|
229 };
|
Chris@16
|
230 return proto_generator()(that);
|
Chris@16
|
231 }
|
Chris@16
|
232 };
|
Chris@16
|
233 template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
|
Chris@16
|
234 struct make_expr_<Tag, deduce_domain , A0 , A1 , A2 , A3 , A4 , A5 , A6
|
Chris@16
|
235 , void , void , void, void>
|
Chris@16
|
236 : make_expr_<
|
Chris@16
|
237 Tag
|
Chris@16
|
238 , typename deduce_domain7<A0 , A1 , A2 , A3 , A4 , A5 , A6>::type
|
Chris@16
|
239 , A0 , A1 , A2 , A3 , A4 , A5 , A6
|
Chris@16
|
240 >
|
Chris@16
|
241 {};
|
Chris@16
|
242 template<typename Tag, typename Domain , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
|
Chris@16
|
243 struct make_expr_<Tag, Domain , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
|
Chris@16
|
244 , void , void, void>
|
Chris@16
|
245 {
|
Chris@16
|
246 typedef
|
Chris@16
|
247 list8<
|
Chris@16
|
248 typename boost::proto::detail::protoify< A0 , Domain >::result_type , typename boost::proto::detail::protoify< A1 , Domain >::result_type , typename boost::proto::detail::protoify< A2 , Domain >::result_type , typename boost::proto::detail::protoify< A3 , Domain >::result_type , typename boost::proto::detail::protoify< A4 , Domain >::result_type , typename boost::proto::detail::protoify< A5 , Domain >::result_type , typename boost::proto::detail::protoify< A6 , Domain >::result_type , typename boost::proto::detail::protoify< A7 , Domain >::result_type
|
Chris@16
|
249 >
|
Chris@16
|
250 proto_args;
|
Chris@16
|
251 typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
|
Chris@16
|
252 typedef typename Domain::proto_generator proto_generator;
|
Chris@16
|
253 typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
|
Chris@16
|
254 BOOST_FORCEINLINE
|
Chris@16
|
255 result_type operator()(typename add_reference<A0 >::type a0 , typename add_reference<A1 >::type a1 , typename add_reference<A2 >::type a2 , typename add_reference<A3 >::type a3 , typename add_reference<A4 >::type a4 , typename add_reference<A5 >::type a5 , typename add_reference<A6 >::type a6 , typename add_reference<A7 >::type a7) const
|
Chris@16
|
256 {
|
Chris@16
|
257 expr_type const that = {
|
Chris@16
|
258 boost::proto::detail::protoify< A0 , Domain >()(a0) , boost::proto::detail::protoify< A1 , Domain >()(a1) , boost::proto::detail::protoify< A2 , Domain >()(a2) , boost::proto::detail::protoify< A3 , Domain >()(a3) , boost::proto::detail::protoify< A4 , Domain >()(a4) , boost::proto::detail::protoify< A5 , Domain >()(a5) , boost::proto::detail::protoify< A6 , Domain >()(a6) , boost::proto::detail::protoify< A7 , Domain >()(a7)
|
Chris@16
|
259 };
|
Chris@16
|
260 return proto_generator()(that);
|
Chris@16
|
261 }
|
Chris@16
|
262 };
|
Chris@16
|
263 template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
|
Chris@16
|
264 struct make_expr_<Tag, deduce_domain , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
|
Chris@16
|
265 , void , void, void>
|
Chris@16
|
266 : make_expr_<
|
Chris@16
|
267 Tag
|
Chris@16
|
268 , typename deduce_domain8<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7>::type
|
Chris@16
|
269 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
|
Chris@16
|
270 >
|
Chris@16
|
271 {};
|
Chris@16
|
272 template<typename Tag, typename Domain , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
|
Chris@16
|
273 struct make_expr_<Tag, Domain , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
|
Chris@16
|
274 , void, void>
|
Chris@16
|
275 {
|
Chris@16
|
276 typedef
|
Chris@16
|
277 list9<
|
Chris@16
|
278 typename boost::proto::detail::protoify< A0 , Domain >::result_type , typename boost::proto::detail::protoify< A1 , Domain >::result_type , typename boost::proto::detail::protoify< A2 , Domain >::result_type , typename boost::proto::detail::protoify< A3 , Domain >::result_type , typename boost::proto::detail::protoify< A4 , Domain >::result_type , typename boost::proto::detail::protoify< A5 , Domain >::result_type , typename boost::proto::detail::protoify< A6 , Domain >::result_type , typename boost::proto::detail::protoify< A7 , Domain >::result_type , typename boost::proto::detail::protoify< A8 , Domain >::result_type
|
Chris@16
|
279 >
|
Chris@16
|
280 proto_args;
|
Chris@16
|
281 typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
|
Chris@16
|
282 typedef typename Domain::proto_generator proto_generator;
|
Chris@16
|
283 typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
|
Chris@16
|
284 BOOST_FORCEINLINE
|
Chris@16
|
285 result_type operator()(typename add_reference<A0 >::type a0 , typename add_reference<A1 >::type a1 , typename add_reference<A2 >::type a2 , typename add_reference<A3 >::type a3 , typename add_reference<A4 >::type a4 , typename add_reference<A5 >::type a5 , typename add_reference<A6 >::type a6 , typename add_reference<A7 >::type a7 , typename add_reference<A8 >::type a8) const
|
Chris@16
|
286 {
|
Chris@16
|
287 expr_type const that = {
|
Chris@16
|
288 boost::proto::detail::protoify< A0 , Domain >()(a0) , boost::proto::detail::protoify< A1 , Domain >()(a1) , boost::proto::detail::protoify< A2 , Domain >()(a2) , boost::proto::detail::protoify< A3 , Domain >()(a3) , boost::proto::detail::protoify< A4 , Domain >()(a4) , boost::proto::detail::protoify< A5 , Domain >()(a5) , boost::proto::detail::protoify< A6 , Domain >()(a6) , boost::proto::detail::protoify< A7 , Domain >()(a7) , boost::proto::detail::protoify< A8 , Domain >()(a8)
|
Chris@16
|
289 };
|
Chris@16
|
290 return proto_generator()(that);
|
Chris@16
|
291 }
|
Chris@16
|
292 };
|
Chris@16
|
293 template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
|
Chris@16
|
294 struct make_expr_<Tag, deduce_domain , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
|
Chris@16
|
295 , void, void>
|
Chris@16
|
296 : make_expr_<
|
Chris@16
|
297 Tag
|
Chris@16
|
298 , typename deduce_domain9<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8>::type
|
Chris@16
|
299 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
|
Chris@16
|
300 >
|
Chris@16
|
301 {};
|
Chris@16
|
302 template<typename Tag, typename Domain , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
|
Chris@16
|
303 struct make_expr_<Tag, Domain , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9
|
Chris@16
|
304 , void>
|
Chris@16
|
305 {
|
Chris@16
|
306 typedef
|
Chris@16
|
307 list10<
|
Chris@16
|
308 typename boost::proto::detail::protoify< A0 , Domain >::result_type , typename boost::proto::detail::protoify< A1 , Domain >::result_type , typename boost::proto::detail::protoify< A2 , Domain >::result_type , typename boost::proto::detail::protoify< A3 , Domain >::result_type , typename boost::proto::detail::protoify< A4 , Domain >::result_type , typename boost::proto::detail::protoify< A5 , Domain >::result_type , typename boost::proto::detail::protoify< A6 , Domain >::result_type , typename boost::proto::detail::protoify< A7 , Domain >::result_type , typename boost::proto::detail::protoify< A8 , Domain >::result_type , typename boost::proto::detail::protoify< A9 , Domain >::result_type
|
Chris@16
|
309 >
|
Chris@16
|
310 proto_args;
|
Chris@16
|
311 typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
|
Chris@16
|
312 typedef typename Domain::proto_generator proto_generator;
|
Chris@16
|
313 typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
|
Chris@16
|
314 BOOST_FORCEINLINE
|
Chris@16
|
315 result_type operator()(typename add_reference<A0 >::type a0 , typename add_reference<A1 >::type a1 , typename add_reference<A2 >::type a2 , typename add_reference<A3 >::type a3 , typename add_reference<A4 >::type a4 , typename add_reference<A5 >::type a5 , typename add_reference<A6 >::type a6 , typename add_reference<A7 >::type a7 , typename add_reference<A8 >::type a8 , typename add_reference<A9 >::type a9) const
|
Chris@16
|
316 {
|
Chris@16
|
317 expr_type const that = {
|
Chris@16
|
318 boost::proto::detail::protoify< A0 , Domain >()(a0) , boost::proto::detail::protoify< A1 , Domain >()(a1) , boost::proto::detail::protoify< A2 , Domain >()(a2) , boost::proto::detail::protoify< A3 , Domain >()(a3) , boost::proto::detail::protoify< A4 , Domain >()(a4) , boost::proto::detail::protoify< A5 , Domain >()(a5) , boost::proto::detail::protoify< A6 , Domain >()(a6) , boost::proto::detail::protoify< A7 , Domain >()(a7) , boost::proto::detail::protoify< A8 , Domain >()(a8) , boost::proto::detail::protoify< A9 , Domain >()(a9)
|
Chris@16
|
319 };
|
Chris@16
|
320 return proto_generator()(that);
|
Chris@16
|
321 }
|
Chris@16
|
322 };
|
Chris@16
|
323 template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
|
Chris@16
|
324 struct make_expr_<Tag, deduce_domain , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9
|
Chris@16
|
325 , void>
|
Chris@16
|
326 : make_expr_<
|
Chris@16
|
327 Tag
|
Chris@16
|
328 , typename deduce_domain10<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9>::type
|
Chris@16
|
329 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9
|
Chris@16
|
330 >
|
Chris@16
|
331 {};
|