00001
00002
00003
00004
00005
00006
00007
00008
00009 #if !defined(BOOST_PP_IS_ITERATING)
00010 # error Boost result_of - do not include this file!
00011 #endif
00012
00013
00014 #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3002)) && BOOST_PP_ITERATION() == 0
00015 # define BOOST_RESULT_OF_ARGS void
00016 #else
00017 # define BOOST_RESULT_OF_ARGS BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)
00018 #endif
00019
00020 #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
00021 template<typename F BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
00022 BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
00023 struct result_of<F(BOOST_RESULT_OF_ARGS)>
00024 : detail::result_of<F, F(BOOST_RESULT_OF_ARGS)> {};
00025 #endif
00026
00027 namespace detail {
00028
00029 template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
00030 BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
00031 struct result_of<R (*)(BOOST_RESULT_OF_ARGS), FArgs>
00032 {
00033 typedef R type;
00034 };
00035
00036 template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
00037 BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
00038 struct result_of<R (&)(BOOST_RESULT_OF_ARGS), FArgs>
00039 {
00040 typedef R type;
00041 };
00042
00043 #undef BOOST_RESULT_OF_ARGS
00044
00045 #if BOOST_PP_ITERATION() > 1 && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
00046 template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
00047 BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
00048 struct result_of<R (T0::*)
00049 (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T)),
00050 FArgs>
00051 {
00052 typedef R type;
00053 };
00054
00055 template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
00056 BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
00057 struct result_of<R (T0::*)
00058 (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))
00059 const,
00060 FArgs>
00061 {
00062 typedef R type;
00063 };
00064
00065 template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
00066 BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
00067 struct result_of<R (T0::*)
00068 (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))
00069 volatile,
00070 FArgs>
00071 {
00072 typedef R type;
00073 };
00074
00075 template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
00076 BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
00077 struct result_of<R (T0::*)
00078 (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))
00079 const volatile,
00080 FArgs>
00081 {
00082 typedef R type;
00083 };
00084 #endif
00085
00086 }