From e014a1d1737994310634fc5f459f0e3dc62bf22b Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Wed, 22 Oct 2014 19:42:48 +0900 Subject: [PATCH] Fix #10443 completely. Signed-off-by: Kohei Takahashi --- .../fusion/functional/invocation/invoke.hpp | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) 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;