diff --git a/include/boost/fusion/functional/invocation/invoke.hpp b/include/boost/fusion/functional/invocation/invoke.hpp index d4aa9456..6e64d1d2 100644 --- a/include/boost/fusion/functional/invocation/invoke.hpp +++ b/include/boost/fusion/functional/invocation/invoke.hpp @@ -54,7 +54,8 @@ namespace boost { namespace fusion { namespace result_of { - template struct invoke; + template + struct invoke; } //~ template @@ -75,7 +76,8 @@ namespace boost { namespace fusion typename Function, class Sequence, int N = result_of::size::value, bool CBI = ft::is_callable_builtin::value, - bool RandomAccess = traits::is_random_access::value + bool RandomAccess = traits::is_random_access::value, + typename Enable = void > struct invoke_impl; @@ -104,7 +106,7 @@ namespace boost { namespace fusion Sequence, N, RandomAccess > { }; - template + template struct invoke_impl : mpl::if_< ft::is_member_function_pointer, invoke_mem_fn, @@ -112,7 +114,7 @@ namespace boost { namespace fusion >::type { }; - template + template struct invoke_impl : mpl::eval_if< ft::is_member_pointer, mpl::if_< ft::is_member_function_pointer, @@ -156,7 +158,14 @@ namespace boost { namespace fusion namespace result_of { - template struct invoke + template + struct invoke; + + template + struct invoke::type, Sequence + >::result_type> { typedef typename detail::invoke_impl< typename boost::remove_reference::type, Sequence @@ -195,13 +204,15 @@ namespace boost { namespace fusion /////////////////////////////////////////////////////////////////////////////// #define N BOOST_PP_ITERATION() +#define M(z,j,data) typename result_of::at_c::type + template - struct invoke_impl + struct invoke_impl::type> { public: typedef typename boost::result_of< -#define M(z,j,data) typename result_of::at_c::type Function(BOOST_PP_ENUM(N,M,~)) >::type result_type; #undef M