Chris@16
|
1 ///////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
2 // deduce_domain_n.hpp
|
Chris@16
|
3 // Definitions of common_domain[n] and deduce_domain[n] class templates.
|
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 A0 , typename A1 , typename A2>
|
Chris@16
|
9 struct common_domain3
|
Chris@16
|
10 {
|
Chris@16
|
11 typedef A0 common1;
|
Chris@16
|
12 typedef typename common_domain2<common1, A1>::type common2; typedef typename common_domain2<common2, A2>::type common3;
|
Chris@16
|
13 typedef common3 type;
|
Chris@16
|
14 BOOST_PROTO_ASSERT_VALID_DOMAIN(type);
|
Chris@16
|
15 };
|
Chris@16
|
16 template<typename E0 , typename E1 , typename E2>
|
Chris@16
|
17 struct deduce_domain3
|
Chris@16
|
18 : common_domain3<
|
Chris@16
|
19 typename domain_of<E0 >::type , typename domain_of<E1 >::type , typename domain_of<E2 >::type
|
Chris@16
|
20 >
|
Chris@16
|
21 {};
|
Chris@16
|
22 template<typename A0 , typename A1 , typename A2 , typename A3>
|
Chris@16
|
23 struct common_domain4
|
Chris@16
|
24 {
|
Chris@16
|
25 typedef A0 common1;
|
Chris@16
|
26 typedef typename common_domain2<common1, A1>::type common2; typedef typename common_domain2<common2, A2>::type common3; typedef typename common_domain2<common3, A3>::type common4;
|
Chris@16
|
27 typedef common4 type;
|
Chris@16
|
28 BOOST_PROTO_ASSERT_VALID_DOMAIN(type);
|
Chris@16
|
29 };
|
Chris@16
|
30 template<typename E0 , typename E1 , typename E2 , typename E3>
|
Chris@16
|
31 struct deduce_domain4
|
Chris@16
|
32 : common_domain4<
|
Chris@16
|
33 typename domain_of<E0 >::type , typename domain_of<E1 >::type , typename domain_of<E2 >::type , typename domain_of<E3 >::type
|
Chris@16
|
34 >
|
Chris@16
|
35 {};
|
Chris@16
|
36 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
|
Chris@16
|
37 struct common_domain5
|
Chris@16
|
38 {
|
Chris@16
|
39 typedef A0 common1;
|
Chris@16
|
40 typedef typename common_domain2<common1, A1>::type common2; typedef typename common_domain2<common2, A2>::type common3; typedef typename common_domain2<common3, A3>::type common4; typedef typename common_domain2<common4, A4>::type common5;
|
Chris@16
|
41 typedef common5 type;
|
Chris@16
|
42 BOOST_PROTO_ASSERT_VALID_DOMAIN(type);
|
Chris@16
|
43 };
|
Chris@16
|
44 template<typename E0 , typename E1 , typename E2 , typename E3 , typename E4>
|
Chris@16
|
45 struct deduce_domain5
|
Chris@16
|
46 : common_domain5<
|
Chris@16
|
47 typename domain_of<E0 >::type , typename domain_of<E1 >::type , typename domain_of<E2 >::type , typename domain_of<E3 >::type , typename domain_of<E4 >::type
|
Chris@16
|
48 >
|
Chris@16
|
49 {};
|
Chris@16
|
50 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
|
Chris@16
|
51 struct common_domain6
|
Chris@16
|
52 {
|
Chris@16
|
53 typedef A0 common1;
|
Chris@16
|
54 typedef typename common_domain2<common1, A1>::type common2; typedef typename common_domain2<common2, A2>::type common3; typedef typename common_domain2<common3, A3>::type common4; typedef typename common_domain2<common4, A4>::type common5; typedef typename common_domain2<common5, A5>::type common6;
|
Chris@16
|
55 typedef common6 type;
|
Chris@16
|
56 BOOST_PROTO_ASSERT_VALID_DOMAIN(type);
|
Chris@16
|
57 };
|
Chris@16
|
58 template<typename E0 , typename E1 , typename E2 , typename E3 , typename E4 , typename E5>
|
Chris@16
|
59 struct deduce_domain6
|
Chris@16
|
60 : common_domain6<
|
Chris@16
|
61 typename domain_of<E0 >::type , typename domain_of<E1 >::type , typename domain_of<E2 >::type , typename domain_of<E3 >::type , typename domain_of<E4 >::type , typename domain_of<E5 >::type
|
Chris@16
|
62 >
|
Chris@16
|
63 {};
|
Chris@16
|
64 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
|
Chris@16
|
65 struct common_domain7
|
Chris@16
|
66 {
|
Chris@16
|
67 typedef A0 common1;
|
Chris@16
|
68 typedef typename common_domain2<common1, A1>::type common2; typedef typename common_domain2<common2, A2>::type common3; typedef typename common_domain2<common3, A3>::type common4; typedef typename common_domain2<common4, A4>::type common5; typedef typename common_domain2<common5, A5>::type common6; typedef typename common_domain2<common6, A6>::type common7;
|
Chris@16
|
69 typedef common7 type;
|
Chris@16
|
70 BOOST_PROTO_ASSERT_VALID_DOMAIN(type);
|
Chris@16
|
71 };
|
Chris@16
|
72 template<typename E0 , typename E1 , typename E2 , typename E3 , typename E4 , typename E5 , typename E6>
|
Chris@16
|
73 struct deduce_domain7
|
Chris@16
|
74 : common_domain7<
|
Chris@16
|
75 typename domain_of<E0 >::type , typename domain_of<E1 >::type , typename domain_of<E2 >::type , typename domain_of<E3 >::type , typename domain_of<E4 >::type , typename domain_of<E5 >::type , typename domain_of<E6 >::type
|
Chris@16
|
76 >
|
Chris@16
|
77 {};
|
Chris@16
|
78 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
|
Chris@16
|
79 struct common_domain8
|
Chris@16
|
80 {
|
Chris@16
|
81 typedef A0 common1;
|
Chris@16
|
82 typedef typename common_domain2<common1, A1>::type common2; typedef typename common_domain2<common2, A2>::type common3; typedef typename common_domain2<common3, A3>::type common4; typedef typename common_domain2<common4, A4>::type common5; typedef typename common_domain2<common5, A5>::type common6; typedef typename common_domain2<common6, A6>::type common7; typedef typename common_domain2<common7, A7>::type common8;
|
Chris@16
|
83 typedef common8 type;
|
Chris@16
|
84 BOOST_PROTO_ASSERT_VALID_DOMAIN(type);
|
Chris@16
|
85 };
|
Chris@16
|
86 template<typename E0 , typename E1 , typename E2 , typename E3 , typename E4 , typename E5 , typename E6 , typename E7>
|
Chris@16
|
87 struct deduce_domain8
|
Chris@16
|
88 : common_domain8<
|
Chris@16
|
89 typename domain_of<E0 >::type , typename domain_of<E1 >::type , typename domain_of<E2 >::type , typename domain_of<E3 >::type , typename domain_of<E4 >::type , typename domain_of<E5 >::type , typename domain_of<E6 >::type , typename domain_of<E7 >::type
|
Chris@16
|
90 >
|
Chris@16
|
91 {};
|
Chris@16
|
92 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
|
Chris@16
|
93 struct common_domain9
|
Chris@16
|
94 {
|
Chris@16
|
95 typedef A0 common1;
|
Chris@16
|
96 typedef typename common_domain2<common1, A1>::type common2; typedef typename common_domain2<common2, A2>::type common3; typedef typename common_domain2<common3, A3>::type common4; typedef typename common_domain2<common4, A4>::type common5; typedef typename common_domain2<common5, A5>::type common6; typedef typename common_domain2<common6, A6>::type common7; typedef typename common_domain2<common7, A7>::type common8; typedef typename common_domain2<common8, A8>::type common9;
|
Chris@16
|
97 typedef common9 type;
|
Chris@16
|
98 BOOST_PROTO_ASSERT_VALID_DOMAIN(type);
|
Chris@16
|
99 };
|
Chris@16
|
100 template<typename E0 , typename E1 , typename E2 , typename E3 , typename E4 , typename E5 , typename E6 , typename E7 , typename E8>
|
Chris@16
|
101 struct deduce_domain9
|
Chris@16
|
102 : common_domain9<
|
Chris@16
|
103 typename domain_of<E0 >::type , typename domain_of<E1 >::type , typename domain_of<E2 >::type , typename domain_of<E3 >::type , typename domain_of<E4 >::type , typename domain_of<E5 >::type , typename domain_of<E6 >::type , typename domain_of<E7 >::type , typename domain_of<E8 >::type
|
Chris@16
|
104 >
|
Chris@16
|
105 {};
|
Chris@16
|
106 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
|
Chris@16
|
107 struct common_domain10
|
Chris@16
|
108 {
|
Chris@16
|
109 typedef A0 common1;
|
Chris@16
|
110 typedef typename common_domain2<common1, A1>::type common2; typedef typename common_domain2<common2, A2>::type common3; typedef typename common_domain2<common3, A3>::type common4; typedef typename common_domain2<common4, A4>::type common5; typedef typename common_domain2<common5, A5>::type common6; typedef typename common_domain2<common6, A6>::type common7; typedef typename common_domain2<common7, A7>::type common8; typedef typename common_domain2<common8, A8>::type common9; typedef typename common_domain2<common9, A9>::type common10;
|
Chris@16
|
111 typedef common10 type;
|
Chris@16
|
112 BOOST_PROTO_ASSERT_VALID_DOMAIN(type);
|
Chris@16
|
113 };
|
Chris@16
|
114 template<typename E0 , typename E1 , typename E2 , typename E3 , typename E4 , typename E5 , typename E6 , typename E7 , typename E8 , typename E9>
|
Chris@16
|
115 struct deduce_domain10
|
Chris@16
|
116 : common_domain10<
|
Chris@16
|
117 typename domain_of<E0 >::type , typename domain_of<E1 >::type , typename domain_of<E2 >::type , typename domain_of<E3 >::type , typename domain_of<E4 >::type , typename domain_of<E5 >::type , typename domain_of<E6 >::type , typename domain_of<E7 >::type , typename domain_of<E8 >::type , typename domain_of<E9 >::type
|
Chris@16
|
118 >
|
Chris@16
|
119 {};
|