]> AND Private Git Repository - canny.git/blob - stc/exp/ml_stc_linux_make_v1.0/include/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
f3868118adc255a220759e24478e4badf8db36c5
[canny.git] / stc / exp / ml_stc_linux_make_v1.0 / include / boost / mpl / aux_ / preprocessed / gcc / template_arity.hpp
1 \r
2 // Copyright Aleksey Gurtovoy 2001-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/aux_/template_arity.hpp" header\r
10 // -- DO NOT modify by hand!\r
11 \r
12 namespace boost { namespace mpl { namespace aux {\r
13 \r
14 template< int N > struct arity_tag\r
15 {\r
16     typedef char (&type)[N + 1];\r
17 };\r
18 \r
19 template<\r
20       int C1, int C2, int C3, int C4, int C5, int C6\r
21     >\r
22 struct max_arity\r
23 {\r
24     BOOST_STATIC_CONSTANT(int, value =\r
25           ( C6 > 0 ? C6 : ( C5 > 0 ? C5 : ( C4 > 0 ? C4 : ( C3 > 0 ? C3 : ( C2 > 0 ? C2 : ( C1 > 0 ? C1 : -1 ) ) ) ) ) )\r
26 \r
27         );\r
28 };\r
29 \r
30 arity_tag<0>::type arity_helper(...);\r
31 \r
32 template<\r
33       template< typename P1 > class F\r
34     , typename T1\r
35     >\r
36 typename arity_tag<1>::type\r
37 arity_helper(type_wrapper< F<T1> >, arity_tag<1>);\r
38 \r
39 template<\r
40       template< typename P1, typename P2 > class F\r
41     , typename T1, typename T2\r
42     >\r
43 typename arity_tag<2>::type\r
44 arity_helper(type_wrapper< F< T1,T2 > >, arity_tag<2>);\r
45 \r
46 template<\r
47       template< typename P1, typename P2, typename P3 > class F\r
48     , typename T1, typename T2, typename T3\r
49     >\r
50 typename arity_tag<3>::type\r
51 arity_helper(type_wrapper< F< T1,T2,T3 > >, arity_tag<3>);\r
52 \r
53 template<\r
54       template< typename P1, typename P2, typename P3, typename P4 > class F\r
55     , typename T1, typename T2, typename T3, typename T4\r
56     >\r
57 typename arity_tag<4>::type\r
58 arity_helper(type_wrapper< F< T1,T2,T3,T4 > >, arity_tag<4>);\r
59 \r
60 template<\r
61       template<\r
62           typename P1, typename P2, typename P3, typename P4\r
63         , typename P5\r
64         >\r
65       class F\r
66     , typename T1, typename T2, typename T3, typename T4, typename T5\r
67     >\r
68 typename arity_tag<5>::type\r
69 arity_helper(type_wrapper< F< T1,T2,T3,T4,T5 > >, arity_tag<5>);\r
70 \r
71 template<\r
72       template<\r
73           typename P1, typename P2, typename P3, typename P4\r
74         , typename P5, typename P6\r
75         >\r
76       class F\r
77     , typename T1, typename T2, typename T3, typename T4, typename T5\r
78     , typename T6\r
79     >\r
80 typename arity_tag<6>::type\r
81 arity_helper(type_wrapper< F< T1,T2,T3,T4,T5,T6 > >, arity_tag<6>);\r
82 template< typename F, int N >\r
83 struct template_arity_impl\r
84 {\r
85     BOOST_STATIC_CONSTANT(int, value =\r
86           sizeof(arity_helper(type_wrapper<F>(), arity_tag<N>())) - 1\r
87         );\r
88 };\r
89 \r
90 template< typename F >\r
91 struct template_arity\r
92 {\r
93     BOOST_STATIC_CONSTANT(int, value  = (\r
94           max_arity< template_arity_impl< F,1 >::value, template_arity_impl< F,2 >::value, template_arity_impl< F,3 >::value, template_arity_impl< F,4 >::value, template_arity_impl< F,5 >::value, template_arity_impl< F,6 >::value >::value\r
95 \r
96         ));\r
97 \r
98     typedef mpl::int_<value> type;\r
99 };\r
100 \r
101 }}}\r