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