Fixes for VS 2008
[dyninst.git] / external / boost / mpl / aux_ / preprocessed / msvc70 / times.hpp
1 \r
2 // Copyright Aleksey Gurtovoy 2000-2004\r
3 //\r
4 // Distributed under the Boost Software License, Version 1.0. \r
5 // (See accompanying file LICENSE_1_0.txt or copy at \r
6 // http://www.boost.org/LICENSE_1_0.txt)\r
7 //\r
8 \r
9 // Preprocessed version of "boost/mpl/times.hpp" header\r
10 // -- DO NOT modify by hand!\r
11 \r
12 namespace boost { namespace mpl {\r
13 \r
14 template<\r
15       typename Tag1\r
16     , typename Tag2\r
17 \r
18     , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value\r
19     , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value\r
20     >\r
21 struct times_impl\r
22     : if_c<\r
23           ( tag1_ > tag2_ )\r
24         , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >\r
25         , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >\r
26         >::type\r
27 {\r
28 };\r
29 \r
30 /// for Digital Mars C++/compilers with no CTPS/TTP support\r
31 template<> struct times_impl< na,na >\r
32 {\r
33     template< typename U1, typename U2 > struct apply\r
34     {\r
35         typedef apply type;\r
36         BOOST_STATIC_CONSTANT(int, value  = 0);\r
37     };\r
38 };\r
39 \r
40 template<> struct times_impl< na,integral_c_tag >\r
41 {\r
42     template< typename U1, typename U2 > struct apply\r
43     {\r
44         typedef apply type;\r
45         BOOST_STATIC_CONSTANT(int, value  = 0);\r
46     };\r
47 };\r
48 \r
49 template<> struct times_impl< integral_c_tag,na >\r
50 {\r
51     template< typename U1, typename U2 > struct apply\r
52     {\r
53         typedef apply type;\r
54         BOOST_STATIC_CONSTANT(int, value  = 0);\r
55     };\r
56 };\r
57 \r
58 template< typename T > struct times_tag\r
59     : tag< T,na >\r
60 {\r
61 };\r
62 \r
63 /// forward declaration\r
64 \r
65 template<\r
66       typename BOOST_MPL_AUX_NA_PARAM(N1)\r
67     , typename BOOST_MPL_AUX_NA_PARAM(N2)\r
68     >\r
69 struct times2;\r
70 \r
71 template<\r
72       typename BOOST_MPL_AUX_NA_PARAM(N1)\r
73     , typename BOOST_MPL_AUX_NA_PARAM(N2)\r
74     , typename N3 = na, typename N4 = na, typename N5 = na\r
75     >\r
76 struct times\r
77 \r
78     : aux::msvc_eti_base< typename if_<\r
79 \r
80           is_na<N3>\r
81         , times2< N1,N2 >\r
82         , times<\r
83               times2< N1,N2 >\r
84             , N3, N4, N5\r
85             >\r
86         >::type\r
87 \r
88     >\r
89 \r
90 {\r
91     BOOST_MPL_AUX_LAMBDA_SUPPORT(\r
92           5\r
93         , times\r
94         , ( N1, N2, N3, N4, N5 )\r
95         )\r
96 };\r
97 \r
98 template<\r
99       typename N1\r
100     , typename N2\r
101     >\r
102 struct times2\r
103     : aux::msvc_eti_base< typename apply_wrap2<\r
104           times_impl<\r
105               typename times_tag<N1>::type\r
106             , typename times_tag<N2>::type\r
107             >\r
108         , N1\r
109         , N2\r
110         >::type >::type\r
111 \r
112 {\r
113     BOOST_MPL_AUX_LAMBDA_SUPPORT(2, times2, (N1, N2))\r
114 \r
115 };\r
116 \r
117 BOOST_MPL_AUX_NA_SPEC2(2, 5, times)\r
118 \r
119 }}\r
120 \r
121 namespace boost { namespace mpl {\r
122 \r
123 namespace aux {\r
124 template< typename T, T n1, T n2 >\r
125 struct times_wknd\r
126 {\r
127     BOOST_STATIC_CONSTANT(T, value  = (n1 * n2));\r
128     typedef integral_c< T,value > type;\r
129 };\r
130 \r
131 }\r
132 \r
133 template<>\r
134 struct times_impl< integral_c_tag,integral_c_tag >\r
135 {\r
136     template< typename N1, typename N2 > struct apply\r
137         : aux::times_wknd<\r
138               typename aux::largest_int<\r
139                   typename N1::value_type\r
140                 , typename N2::value_type\r
141                 >::type\r
142             , N1::value\r
143             , N2::value\r
144             >::type\r
145 \r
146     {\r
147     };\r
148 };\r
149 \r
150 }}\r