1 // Boost result_of library
3 // Copyright Douglas Gregor 2004. Use, modification and
4 // distribution is subject to the Boost Software License, Version
5 // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt)
8 // For more information, see http://www.boost.org/libs/utility
9 #if !defined(BOOST_PP_IS_ITERATING)
10 # error Boost result_of - do not include this file!
13 // CWPro8 requires an argument in a function type specialization
14 #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3002)) && BOOST_PP_ITERATION() == 0
15 # define BOOST_RESULT_OF_ARGS void
17 # define BOOST_RESULT_OF_ARGS BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)
20 #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
21 template<typename F BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
22 BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
23 struct result_of<F(BOOST_RESULT_OF_ARGS)>
24 : boost::detail::result_of_impl<F, F(BOOST_RESULT_OF_ARGS), (boost::detail::has_result_type<F>::value)> {};
27 #undef BOOST_RESULT_OF_ARGS
29 #if BOOST_PP_ITERATION() >= 1
33 template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
34 BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
35 struct result_of_impl<R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), FArgs, false>
40 template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
41 BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
42 struct result_of_impl<R (&)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), FArgs, false>
47 #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
48 template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
49 BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
50 struct result_of_impl<R (T0::*)
51 (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T)),
57 template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
58 BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
59 struct result_of_impl<R (T0::*)
60 (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))
67 template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
68 BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
69 struct result_of_impl<R (T0::*)
70 (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))
77 template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
78 BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
79 struct result_of_impl<R (T0::*)
80 (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))