1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- // Boost result_of library
- // Copyright Douglas Gregor 2004. Use, modification and
- // distribution is subject to the Boost Software License, Version
- // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- // For more information, see http://www.boost.org/libs/utility
- #if !defined(BOOST_PP_IS_ITERATING)
- # error Boost result_of - do not include this file!
- #endif
- // CWPro8 requires an argument in a function type specialization
- #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3002)) && BOOST_PP_ITERATION() == 0
- # define BOOST_RESULT_OF_ARGS void
- #else
- # define BOOST_RESULT_OF_ARGS BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)
- #endif
- #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
- template<typename F BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
- BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
- struct result_of<F(BOOST_RESULT_OF_ARGS)>
- : boost::detail::result_of_impl<F, F(BOOST_RESULT_OF_ARGS), (boost::detail::has_result_type<F>::value)> {};
- #endif
- #undef BOOST_RESULT_OF_ARGS
- #if BOOST_PP_ITERATION() >= 1
- namespace detail {
- template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
- BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
- struct result_of_impl<R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), FArgs, false>
- {
- typedef R type;
- };
- template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
- BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
- struct result_of_impl<R (&)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), FArgs, false>
- {
- typedef R type;
- };
- #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
- template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
- BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
- struct result_of_impl<R (T0::*)
- (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T)),
- FArgs, false>
- {
- typedef R type;
- };
- template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
- BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
- struct result_of_impl<R (T0::*)
- (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))
- const,
- FArgs, false>
- {
- typedef R type;
- };
- template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
- BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
- struct result_of_impl<R (T0::*)
- (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))
- volatile,
- FArgs, false>
- {
- typedef R type;
- };
- template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
- BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
- struct result_of_impl<R (T0::*)
- (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))
- const volatile,
- FArgs, false>
- {
- typedef R type;
- };
- #endif
- }
- #endif
|