diff --git a/include/boost/fusion/functional/invocation/invoke_function_object.hpp b/include/boost/fusion/functional/invocation/invoke_function_object.hpp index f06fb771..e30218e2 100644 --- a/include/boost/fusion/functional/invocation/invoke_function_object.hpp +++ b/include/boost/fusion/functional/invocation/invoke_function_object.hpp @@ -79,7 +79,7 @@ namespace boost { namespace fusion template struct invoke_function_object : detail::invoke_function_object_impl< typename boost::remove_reference::type, Sequence - >::template result<> + >::result { }; } @@ -117,18 +117,16 @@ namespace boost { namespace fusion { public: - template struct result #define M(z,j,data) \ typename boost::remove_reference< \ typename result_of::value_at_c::type >::type - : boost::result_of< - typename remove_const::type (BOOST_PP_ENUM(N,M,~))> + : boost::result_of< Function (BOOST_PP_ENUM(N,M,~)) > #undef M { }; template - static inline typename result::type + static inline typename result::type call(F & f, Sequence & s) { #define M(z,j,data) fusion::at_c(s) @@ -143,17 +141,13 @@ namespace boost { namespace fusion private: typedef invoke_function_object_param_types seq; public: - template struct result - - { - typedef typename - boost::result_of< - typename remove_const::type (BOOST_PP_ENUM_PARAMS(N,typename seq::T))>::type type; - }; + : boost::result_of< + Function (BOOST_PP_ENUM_PARAMS(N,typename seq::T)) > + { }; template - static inline typename result::type + static inline typename result::type call(F & f, Sequence & s) { #if N > 0 diff --git a/include/boost/fusion/functional/invocation/invoke_procedure.hpp b/include/boost/fusion/functional/invocation/invoke_procedure.hpp index 3e68f276..31822ade 100644 --- a/include/boost/fusion/functional/invocation/invoke_procedure.hpp +++ b/include/boost/fusion/functional/invocation/invoke_procedure.hpp @@ -19,24 +19,13 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - #include +#include + #include #include #include -#include #include #include @@ -51,7 +40,10 @@ namespace boost { namespace fusion { namespace result_of { - template struct invoke_procedure; + template struct invoke_procedure + { + typedef void type; + }; } template @@ -69,27 +61,10 @@ namespace boost { namespace fusion template< typename Function, class Sequence, int N = result_of::size::value, - bool CBI = ft::is_callable_builtin::value, bool MFP = ft::is_member_function_pointer::value, bool RandomAccess = traits::is_random_access::value > - struct invoke_procedure_impl - { - typedef boost::blank result; - }; - - template - // Contains void type member, empty on arity mismatch - struct invoke_procedure_result - : mpl::if_< - mpl::or_< - mpl::bool_, - mpl::equal_to< ft::function_arity, N >, - mpl::and_< ft::is_callable_builtin, - mpl::less< ft::function_arity, N > > - >, mpl::identity, boost::blank - >::type - { }; + struct invoke_procedure_impl; #define BOOST_PP_FILENAME_1 \ @@ -99,15 +74,6 @@ namespace boost { namespace fusion } - namespace result_of - { - template struct invoke_procedure - : detail::invoke_procedure_impl< - typename boost::remove_reference::type, Sequence - >::result - { }; - } - template inline void invoke_procedure(Function f, Sequence & s) { @@ -137,13 +103,9 @@ namespace boost { namespace fusion #define M(z,j,data) fusion::at_c(s) - template - struct invoke_procedure_impl + template + struct invoke_procedure_impl { - struct result - : invoke_procedure_result< Function, mpl::size_t, CBI > - { }; - static inline void call(Function & f, Sequence & s) { f(BOOST_PP_ENUM(N,M,~)); @@ -152,12 +114,8 @@ namespace boost { namespace fusion #if N > 0 template - struct invoke_procedure_impl + struct invoke_procedure_impl { - struct result - : invoke_procedure_result< Function, mpl::size_t > - { }; - static inline void call(Function & f, Sequence & s) { (that_ptr::type I ## j ; \ I##j i##j = fusion::next(BOOST_PP_CAT(i,BOOST_PP_DEC(j))); - template - struct invoke_procedure_impl + template + struct invoke_procedure_impl { - struct result - : invoke_procedure_result< Function, mpl::size_t, CBI > - { }; - static inline void call(Function & f, Sequence & s) { #if N > 0 @@ -194,12 +148,8 @@ namespace boost { namespace fusion #if N > 0 template - struct invoke_procedure_impl + struct invoke_procedure_impl { - struct result - : invoke_procedure_result< Function, mpl::size_t > - { }; - static inline void call(Function & f, Sequence & s) { typedef typename result_of::begin::type I0;