result_of_iterate.hpp

Go to the documentation of this file.
00001 // Boost result_of library
00002 
00003 //  Copyright Douglas Gregor 2004. Use, modification and
00004 //  distribution is subject to the Boost Software License, Version
00005 //  1.0. (See accompanying file LICENSE_1_0.txt or copy at
00006 //  http://www.boost.org/LICENSE_1_0.txt)
00007 
00008 // For more information, see http://www.boost.org/libs/utility
00009 #if !defined(BOOST_PP_IS_ITERATING)
00010 # error Boost result_of - do not include this file!
00011 #endif
00012 
00013 // CWPro8 requires an argument in a function type specialization
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 }

Generated on Wed Jan 21 15:32:10 2009 for SystemC by  doxygen 1.5.5