Chris@16
|
1 ///////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
2 /// \file make_expr_funop.hpp
|
Chris@16
|
3 /// Contains definition of make_expr\<\>::operator() member functions.
|
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<typename This , typename A0 , typename A1>
|
Chris@16
|
9 struct result<This(A0 , A1)>
|
Chris@16
|
10 {
|
Chris@16
|
11 typedef
|
Chris@16
|
12 typename result_of::make_expr<
|
Chris@16
|
13 Tag
|
Chris@16
|
14 , Domain
|
Chris@16
|
15 , A0 , A1
|
Chris@16
|
16 >::type
|
Chris@16
|
17 type;
|
Chris@16
|
18 };
|
Chris@16
|
19
|
Chris@16
|
20
|
Chris@16
|
21 template<typename A0 , typename A1>
|
Chris@16
|
22 BOOST_FORCEINLINE
|
Chris@16
|
23 typename result_of::make_expr<
|
Chris@16
|
24 Tag
|
Chris@16
|
25 , Domain
|
Chris@16
|
26 , const A0 , const A1
|
Chris@16
|
27 >::type const
|
Chris@16
|
28 operator ()(const A0 &a0 , const A1 &a1) const
|
Chris@16
|
29 {
|
Chris@16
|
30 return proto::detail::make_expr_<
|
Chris@16
|
31 Tag
|
Chris@16
|
32 , Domain
|
Chris@16
|
33 , const A0 , const A1
|
Chris@16
|
34 >()(a0 , a1);
|
Chris@16
|
35 }
|
Chris@16
|
36 template<typename This , typename A0 , typename A1 , typename A2>
|
Chris@16
|
37 struct result<This(A0 , A1 , A2)>
|
Chris@16
|
38 {
|
Chris@16
|
39 typedef
|
Chris@16
|
40 typename result_of::make_expr<
|
Chris@16
|
41 Tag
|
Chris@16
|
42 , Domain
|
Chris@16
|
43 , A0 , A1 , A2
|
Chris@16
|
44 >::type
|
Chris@16
|
45 type;
|
Chris@16
|
46 };
|
Chris@16
|
47
|
Chris@16
|
48
|
Chris@16
|
49 template<typename A0 , typename A1 , typename A2>
|
Chris@16
|
50 BOOST_FORCEINLINE
|
Chris@16
|
51 typename result_of::make_expr<
|
Chris@16
|
52 Tag
|
Chris@16
|
53 , Domain
|
Chris@16
|
54 , const A0 , const A1 , const A2
|
Chris@16
|
55 >::type const
|
Chris@16
|
56 operator ()(const A0 &a0 , const A1 &a1 , const A2 &a2) const
|
Chris@16
|
57 {
|
Chris@16
|
58 return proto::detail::make_expr_<
|
Chris@16
|
59 Tag
|
Chris@16
|
60 , Domain
|
Chris@16
|
61 , const A0 , const A1 , const A2
|
Chris@16
|
62 >()(a0 , a1 , a2);
|
Chris@16
|
63 }
|
Chris@16
|
64 template<typename This , typename A0 , typename A1 , typename A2 , typename A3>
|
Chris@16
|
65 struct result<This(A0 , A1 , A2 , A3)>
|
Chris@16
|
66 {
|
Chris@16
|
67 typedef
|
Chris@16
|
68 typename result_of::make_expr<
|
Chris@16
|
69 Tag
|
Chris@16
|
70 , Domain
|
Chris@16
|
71 , A0 , A1 , A2 , A3
|
Chris@16
|
72 >::type
|
Chris@16
|
73 type;
|
Chris@16
|
74 };
|
Chris@16
|
75
|
Chris@16
|
76
|
Chris@16
|
77 template<typename A0 , typename A1 , typename A2 , typename A3>
|
Chris@16
|
78 BOOST_FORCEINLINE
|
Chris@16
|
79 typename result_of::make_expr<
|
Chris@16
|
80 Tag
|
Chris@16
|
81 , Domain
|
Chris@16
|
82 , const A0 , const A1 , const A2 , const A3
|
Chris@16
|
83 >::type const
|
Chris@16
|
84 operator ()(const A0 &a0 , const A1 &a1 , const A2 &a2 , const A3 &a3) const
|
Chris@16
|
85 {
|
Chris@16
|
86 return proto::detail::make_expr_<
|
Chris@16
|
87 Tag
|
Chris@16
|
88 , Domain
|
Chris@16
|
89 , const A0 , const A1 , const A2 , const A3
|
Chris@16
|
90 >()(a0 , a1 , a2 , a3);
|
Chris@16
|
91 }
|
Chris@16
|
92 template<typename This , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
|
Chris@16
|
93 struct result<This(A0 , A1 , A2 , A3 , A4)>
|
Chris@16
|
94 {
|
Chris@16
|
95 typedef
|
Chris@16
|
96 typename result_of::make_expr<
|
Chris@16
|
97 Tag
|
Chris@16
|
98 , Domain
|
Chris@16
|
99 , A0 , A1 , A2 , A3 , A4
|
Chris@16
|
100 >::type
|
Chris@16
|
101 type;
|
Chris@16
|
102 };
|
Chris@16
|
103
|
Chris@16
|
104
|
Chris@16
|
105 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
|
Chris@16
|
106 BOOST_FORCEINLINE
|
Chris@16
|
107 typename result_of::make_expr<
|
Chris@16
|
108 Tag
|
Chris@16
|
109 , Domain
|
Chris@16
|
110 , const A0 , const A1 , const A2 , const A3 , const A4
|
Chris@16
|
111 >::type const
|
Chris@16
|
112 operator ()(const A0 &a0 , const A1 &a1 , const A2 &a2 , const A3 &a3 , const A4 &a4) const
|
Chris@16
|
113 {
|
Chris@16
|
114 return proto::detail::make_expr_<
|
Chris@16
|
115 Tag
|
Chris@16
|
116 , Domain
|
Chris@16
|
117 , const A0 , const A1 , const A2 , const A3 , const A4
|
Chris@16
|
118 >()(a0 , a1 , a2 , a3 , a4);
|
Chris@16
|
119 }
|
Chris@16
|
120 template<typename This , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
|
Chris@16
|
121 struct result<This(A0 , A1 , A2 , A3 , A4 , A5)>
|
Chris@16
|
122 {
|
Chris@16
|
123 typedef
|
Chris@16
|
124 typename result_of::make_expr<
|
Chris@16
|
125 Tag
|
Chris@16
|
126 , Domain
|
Chris@16
|
127 , A0 , A1 , A2 , A3 , A4 , A5
|
Chris@16
|
128 >::type
|
Chris@16
|
129 type;
|
Chris@16
|
130 };
|
Chris@16
|
131
|
Chris@16
|
132
|
Chris@16
|
133 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
|
Chris@16
|
134 BOOST_FORCEINLINE
|
Chris@16
|
135 typename result_of::make_expr<
|
Chris@16
|
136 Tag
|
Chris@16
|
137 , Domain
|
Chris@16
|
138 , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
|
Chris@16
|
139 >::type const
|
Chris@16
|
140 operator ()(const A0 &a0 , const A1 &a1 , const A2 &a2 , const A3 &a3 , const A4 &a4 , const A5 &a5) const
|
Chris@16
|
141 {
|
Chris@16
|
142 return proto::detail::make_expr_<
|
Chris@16
|
143 Tag
|
Chris@16
|
144 , Domain
|
Chris@16
|
145 , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
|
Chris@16
|
146 >()(a0 , a1 , a2 , a3 , a4 , a5);
|
Chris@16
|
147 }
|
Chris@16
|
148 template<typename This , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
|
Chris@16
|
149 struct result<This(A0 , A1 , A2 , A3 , A4 , A5 , A6)>
|
Chris@16
|
150 {
|
Chris@16
|
151 typedef
|
Chris@16
|
152 typename result_of::make_expr<
|
Chris@16
|
153 Tag
|
Chris@16
|
154 , Domain
|
Chris@16
|
155 , A0 , A1 , A2 , A3 , A4 , A5 , A6
|
Chris@16
|
156 >::type
|
Chris@16
|
157 type;
|
Chris@16
|
158 };
|
Chris@16
|
159
|
Chris@16
|
160
|
Chris@16
|
161 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
|
Chris@16
|
162 BOOST_FORCEINLINE
|
Chris@16
|
163 typename result_of::make_expr<
|
Chris@16
|
164 Tag
|
Chris@16
|
165 , Domain
|
Chris@16
|
166 , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
|
Chris@16
|
167 >::type const
|
Chris@16
|
168 operator ()(const A0 &a0 , const A1 &a1 , const A2 &a2 , const A3 &a3 , const A4 &a4 , const A5 &a5 , const A6 &a6) const
|
Chris@16
|
169 {
|
Chris@16
|
170 return proto::detail::make_expr_<
|
Chris@16
|
171 Tag
|
Chris@16
|
172 , Domain
|
Chris@16
|
173 , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
|
Chris@16
|
174 >()(a0 , a1 , a2 , a3 , a4 , a5 , a6);
|
Chris@16
|
175 }
|
Chris@16
|
176 template<typename This , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
|
Chris@16
|
177 struct result<This(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7)>
|
Chris@16
|
178 {
|
Chris@16
|
179 typedef
|
Chris@16
|
180 typename result_of::make_expr<
|
Chris@16
|
181 Tag
|
Chris@16
|
182 , Domain
|
Chris@16
|
183 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
|
Chris@16
|
184 >::type
|
Chris@16
|
185 type;
|
Chris@16
|
186 };
|
Chris@16
|
187
|
Chris@16
|
188
|
Chris@16
|
189 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
|
Chris@16
|
190 BOOST_FORCEINLINE
|
Chris@16
|
191 typename result_of::make_expr<
|
Chris@16
|
192 Tag
|
Chris@16
|
193 , Domain
|
Chris@16
|
194 , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
|
Chris@16
|
195 >::type const
|
Chris@16
|
196 operator ()(const A0 &a0 , const A1 &a1 , const A2 &a2 , const A3 &a3 , const A4 &a4 , const A5 &a5 , const A6 &a6 , const A7 &a7) const
|
Chris@16
|
197 {
|
Chris@16
|
198 return proto::detail::make_expr_<
|
Chris@16
|
199 Tag
|
Chris@16
|
200 , Domain
|
Chris@16
|
201 , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
|
Chris@16
|
202 >()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
|
Chris@16
|
203 }
|
Chris@16
|
204 template<typename This , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
|
Chris@16
|
205 struct result<This(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8)>
|
Chris@16
|
206 {
|
Chris@16
|
207 typedef
|
Chris@16
|
208 typename result_of::make_expr<
|
Chris@16
|
209 Tag
|
Chris@16
|
210 , Domain
|
Chris@16
|
211 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
|
Chris@16
|
212 >::type
|
Chris@16
|
213 type;
|
Chris@16
|
214 };
|
Chris@16
|
215
|
Chris@16
|
216
|
Chris@16
|
217 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
|
Chris@16
|
218 BOOST_FORCEINLINE
|
Chris@16
|
219 typename result_of::make_expr<
|
Chris@16
|
220 Tag
|
Chris@16
|
221 , Domain
|
Chris@16
|
222 , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
|
Chris@16
|
223 >::type const
|
Chris@16
|
224 operator ()(const A0 &a0 , const A1 &a1 , const A2 &a2 , const A3 &a3 , const A4 &a4 , const A5 &a5 , const A6 &a6 , const A7 &a7 , const A8 &a8) const
|
Chris@16
|
225 {
|
Chris@16
|
226 return proto::detail::make_expr_<
|
Chris@16
|
227 Tag
|
Chris@16
|
228 , Domain
|
Chris@16
|
229 , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
|
Chris@16
|
230 >()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
|
Chris@16
|
231 }
|
Chris@16
|
232 template<typename This , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
|
Chris@16
|
233 struct result<This(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9)>
|
Chris@16
|
234 {
|
Chris@16
|
235 typedef
|
Chris@16
|
236 typename result_of::make_expr<
|
Chris@16
|
237 Tag
|
Chris@16
|
238 , Domain
|
Chris@16
|
239 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9
|
Chris@16
|
240 >::type
|
Chris@16
|
241 type;
|
Chris@16
|
242 };
|
Chris@16
|
243
|
Chris@16
|
244
|
Chris@16
|
245 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
|
Chris@16
|
246 BOOST_FORCEINLINE
|
Chris@16
|
247 typename result_of::make_expr<
|
Chris@16
|
248 Tag
|
Chris@16
|
249 , Domain
|
Chris@16
|
250 , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8 , const A9
|
Chris@16
|
251 >::type const
|
Chris@16
|
252 operator ()(const A0 &a0 , const A1 &a1 , const A2 &a2 , const A3 &a3 , const A4 &a4 , const A5 &a5 , const A6 &a6 , const A7 &a7 , const A8 &a8 , const A9 &a9) const
|
Chris@16
|
253 {
|
Chris@16
|
254 return proto::detail::make_expr_<
|
Chris@16
|
255 Tag
|
Chris@16
|
256 , Domain
|
Chris@16
|
257 , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8 , const A9
|
Chris@16
|
258 >()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9);
|
Chris@16
|
259 }
|