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