1 // Boost result_of library
\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
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
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
17 # define BOOST_RESULT_OF_ARGS BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)
\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
27 #undef BOOST_RESULT_OF_ARGS
\r
29 #if BOOST_PP_ITERATION() >= 1
\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
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
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
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
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
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