]> AND Private Git Repository - canny.git/blob - stc/exp/ml_stc_linux_make_v1.0/include/boost/utility/detail/result_of_iterate.hpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
dd32cc285ff80afdac7ca566106c3e2171d84ca5
[canny.git] / stc / exp / ml_stc_linux_make_v1.0 / include / boost / utility / detail / result_of_iterate.hpp
1 // Boost result_of library\r
2 \r
3 //  Copyright Douglas Gregor 2004. Use, modification and\r
4 //  distribution is subject to the Boost Software License, Version\r
5 //  1.0. (See accompanying file LICENSE_1_0.txt or copy at\r
6 //  http://www.boost.org/LICENSE_1_0.txt)\r
7 \r
8 // For more information, see http://www.boost.org/libs/utility\r
9 #if !defined(BOOST_PP_IS_ITERATING)\r
10 # error Boost result_of - do not include this file!\r
11 #endif\r
12 \r
13 // CWPro8 requires an argument in a function type specialization\r
14 #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3002)) && BOOST_PP_ITERATION() == 0\r
15 # define BOOST_RESULT_OF_ARGS void\r
16 #else\r
17 # define BOOST_RESULT_OF_ARGS BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)\r
18 #endif\r
19 \r
20 #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))\r
21 template<typename F BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())\r
22          BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>\r
23 struct result_of<F(BOOST_RESULT_OF_ARGS)>\r
24     : boost::detail::result_of_impl<F, F(BOOST_RESULT_OF_ARGS), (boost::detail::has_result_type<F>::value)> {};\r
25 #endif\r
26 \r
27 #undef BOOST_RESULT_OF_ARGS\r
28 \r
29 #if BOOST_PP_ITERATION() >= 1 \r
30 \r
31 namespace detail {\r
32 \r
33 template<typename R,  typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())\r
34          BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>\r
35 struct result_of_impl<R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), FArgs, false>\r
36 {\r
37   typedef R type;\r
38 };\r
39 \r
40 template<typename R,  typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())\r
41          BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>\r
42 struct result_of_impl<R (&)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), FArgs, false>\r
43 {\r
44   typedef R type;\r
45 };\r
46 \r
47 #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))\r
48 template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())\r
49          BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>\r
50 struct result_of_impl<R (T0::*)\r
51                      (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T)),\r
52                  FArgs, false>\r
53 {\r
54   typedef R type;\r
55 };\r
56 \r
57 template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())\r
58          BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>\r
59 struct result_of_impl<R (T0::*)\r
60                      (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))\r
61                      const,\r
62                  FArgs, false>\r
63 {\r
64   typedef R type;\r
65 };\r
66 \r
67 template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())\r
68          BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>\r
69 struct result_of_impl<R (T0::*)\r
70                      (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))\r
71                      volatile,\r
72                  FArgs, false>\r
73 {\r
74   typedef R type;\r
75 };\r
76 \r
77 template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())\r
78          BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>\r
79 struct result_of_impl<R (T0::*)\r
80                      (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))\r
81                      const volatile,\r
82                  FArgs, false>\r
83 {\r
84   typedef R type;\r
85 };\r
86 #endif\r
87 \r
88 }\r
89 #endif\r