diff --git a/include/boost/fusion/functional/invocation/invoke.hpp b/include/boost/fusion/functional/invocation/invoke.hpp index a3ddd4a2..2de4fced 100644 --- a/include/boost/fusion/functional/invocation/invoke.hpp +++ b/include/boost/fusion/functional/invocation/invoke.hpp @@ -52,11 +52,12 @@ namespace boost { namespace fusion { - namespace result_of - { - template - struct invoke; - } + //~ namespace result_of + //~ { + //~ template + //~ struct invoke; + //~ } //~ template //~ inline typename result_of::invoke::type @@ -72,6 +73,8 @@ namespace boost { namespace fusion { namespace ft = function_types; + template struct always_void_ { typedef T type; }; + template< typename Function, class Sequence, int N = result_of::size::value, @@ -158,18 +161,14 @@ namespace boost { namespace fusion namespace result_of { - template - struct invoke; - - template - struct invoke::type, Sequence - >::result_type> + template ::type, Sequence + >::result_type> + struct invoke { - typedef typename detail::invoke_impl< - typename boost::remove_reference::type, Sequence - >::result_type type; + typedef Enable type; }; } @@ -208,7 +207,9 @@ namespace boost { namespace fusion template struct invoke_impl::type> + typename always_void_< + typename boost::result_of::type + >::type> { public: @@ -299,7 +300,12 @@ namespace boost { namespace fusion fusion::next(BOOST_PP_CAT(i,BOOST_PP_DEC(j))); template - struct invoke_impl + struct invoke_impl::BOOST_PP_CAT(T, j) + typename boost::result_of::type + >::type> +#undef L { private: typedef invoke_param_types seq;