1 /*=============================================================================
2 Copyright (c) 2011 Thomas Heller
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 ==============================================================================*/
14 template <typename F, typename A0>
15 struct has_phx2_result<F, A0>
19 , has_phx2_result_impl<typename F::template result<F(A0)> >
22 template <typename F, typename A0>
23 struct phx2_result<F, A0>
25 typedef typename F::template result<A0>::type type;
27 template <typename F, typename A0>
28 struct phx2_result<F, A0 &>
30 typedef typename F::template result<A0>::type type;
32 template <typename F, typename A0>
33 struct phx2_result<F, A0 const&>
35 typedef typename F::template result<A0>::type type;
44 template <typename F, typename A0 , typename A1>
45 struct has_phx2_result<F, A0 , A1>
49 , has_phx2_result_impl<typename F::template result<F(A0 , A1)> >
52 template <typename F, typename A0 , typename A1>
53 struct phx2_result<F, A0 , A1>
55 typedef typename F::template result<A0 , A1>::type type;
57 template <typename F, typename A0 , typename A1>
58 struct phx2_result<F, A0 & , A1 &>
60 typedef typename F::template result<A0 , A1>::type type;
62 template <typename F, typename A0 , typename A1>
63 struct phx2_result<F, A0 const& , A1 const&>
65 typedef typename F::template result<A0 , A1>::type type;
74 template <typename F, typename A0 , typename A1 , typename A2>
75 struct has_phx2_result<F, A0 , A1 , A2>
79 , has_phx2_result_impl<typename F::template result<F(A0 , A1 , A2)> >
82 template <typename F, typename A0 , typename A1 , typename A2>
83 struct phx2_result<F, A0 , A1 , A2>
85 typedef typename F::template result<A0 , A1 , A2>::type type;
87 template <typename F, typename A0 , typename A1 , typename A2>
88 struct phx2_result<F, A0 & , A1 & , A2 &>
90 typedef typename F::template result<A0 , A1 , A2>::type type;
92 template <typename F, typename A0 , typename A1 , typename A2>
93 struct phx2_result<F, A0 const& , A1 const& , A2 const&>
95 typedef typename F::template result<A0 , A1 , A2>::type type;
104 template <typename F, typename A0 , typename A1 , typename A2 , typename A3>
105 struct has_phx2_result<F, A0 , A1 , A2 , A3>
109 , has_phx2_result_impl<typename F::template result<F(A0 , A1 , A2 , A3)> >
112 template <typename F, typename A0 , typename A1 , typename A2 , typename A3>
113 struct phx2_result<F, A0 , A1 , A2 , A3>
115 typedef typename F::template result<A0 , A1 , A2 , A3>::type type;
117 template <typename F, typename A0 , typename A1 , typename A2 , typename A3>
118 struct phx2_result<F, A0 & , A1 & , A2 & , A3 &>
120 typedef typename F::template result<A0 , A1 , A2 , A3>::type type;
122 template <typename F, typename A0 , typename A1 , typename A2 , typename A3>
123 struct phx2_result<F, A0 const& , A1 const& , A2 const& , A3 const&>
125 typedef typename F::template result<A0 , A1 , A2 , A3>::type type;
134 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
135 struct has_phx2_result<F, A0 , A1 , A2 , A3 , A4>
139 , has_phx2_result_impl<typename F::template result<F(A0 , A1 , A2 , A3 , A4)> >
142 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
143 struct phx2_result<F, A0 , A1 , A2 , A3 , A4>
145 typedef typename F::template result<A0 , A1 , A2 , A3 , A4>::type type;
147 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
148 struct phx2_result<F, A0 & , A1 & , A2 & , A3 & , A4 &>
150 typedef typename F::template result<A0 , A1 , A2 , A3 , A4>::type type;
152 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
153 struct phx2_result<F, A0 const& , A1 const& , A2 const& , A3 const& , A4 const&>
155 typedef typename F::template result<A0 , A1 , A2 , A3 , A4>::type type;
164 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
165 struct has_phx2_result<F, A0 , A1 , A2 , A3 , A4 , A5>
169 , has_phx2_result_impl<typename F::template result<F(A0 , A1 , A2 , A3 , A4 , A5)> >
172 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
173 struct phx2_result<F, A0 , A1 , A2 , A3 , A4 , A5>
175 typedef typename F::template result<A0 , A1 , A2 , A3 , A4 , A5>::type type;
177 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
178 struct phx2_result<F, A0 & , A1 & , A2 & , A3 & , A4 & , A5 &>
180 typedef typename F::template result<A0 , A1 , A2 , A3 , A4 , A5>::type type;
182 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
183 struct phx2_result<F, A0 const& , A1 const& , A2 const& , A3 const& , A4 const& , A5 const&>
185 typedef typename F::template result<A0 , A1 , A2 , A3 , A4 , A5>::type type;
194 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
195 struct has_phx2_result<F, A0 , A1 , A2 , A3 , A4 , A5 , A6>
199 , has_phx2_result_impl<typename F::template result<F(A0 , A1 , A2 , A3 , A4 , A5 , A6)> >
202 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
203 struct phx2_result<F, A0 , A1 , A2 , A3 , A4 , A5 , A6>
205 typedef typename F::template result<A0 , A1 , A2 , A3 , A4 , A5 , A6>::type type;
207 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
208 struct phx2_result<F, A0 & , A1 & , A2 & , A3 & , A4 & , A5 & , A6 &>
210 typedef typename F::template result<A0 , A1 , A2 , A3 , A4 , A5 , A6>::type type;
212 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
213 struct phx2_result<F, A0 const& , A1 const& , A2 const& , A3 const& , A4 const& , A5 const& , A6 const&>
215 typedef typename F::template result<A0 , A1 , A2 , A3 , A4 , A5 , A6>::type type;
224 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
225 struct has_phx2_result<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7>
229 , has_phx2_result_impl<typename F::template result<F(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7)> >
232 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
233 struct phx2_result<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7>
235 typedef typename F::template result<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7>::type type;
237 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
238 struct phx2_result<F, A0 & , A1 & , A2 & , A3 & , A4 & , A5 & , A6 & , A7 &>
240 typedef typename F::template result<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7>::type type;
242 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
243 struct phx2_result<F, A0 const& , A1 const& , A2 const& , A3 const& , A4 const& , A5 const& , A6 const& , A7 const&>
245 typedef typename F::template result<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7>::type type;
254 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
255 struct has_phx2_result<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8>
259 , has_phx2_result_impl<typename F::template result<F(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8)> >
262 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
263 struct phx2_result<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8>
265 typedef typename F::template result<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8>::type type;
267 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
268 struct phx2_result<F, A0 & , A1 & , A2 & , A3 & , A4 & , A5 & , A6 & , A7 & , A8 &>
270 typedef typename F::template result<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8>::type type;
272 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
273 struct phx2_result<F, A0 const& , A1 const& , A2 const& , A3 const& , A4 const& , A5 const& , A6 const& , A7 const& , A8 const&>
275 typedef typename F::template result<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8>::type type;