diff --git a/include/chaiscript/dispatchkit/function_call_detail.hpp b/include/chaiscript/dispatchkit/function_call_detail.hpp index b739281..ab21684 100644 --- a/include/chaiscript/dispatchkit/function_call_detail.hpp +++ b/include/chaiscript/dispatchkit/function_call_detail.hpp @@ -27,12 +27,11 @@ namespace chaiscript { namespace detail { - /** * Internal helper class for handling the return * value of a build_function_caller */ - template + template struct Function_Caller_Ret { static Ret call(const std::vector &t_funcs, @@ -42,11 +41,25 @@ namespace chaiscript } }; + /** + * Specialization for arithmetic return types + */ + template + struct Function_Caller_Ret + { + static Ret call(const std::vector &t_funcs, + const std::vector ¶ms, const Dynamic_Cast_Conversions &t_conversions) + { + return Boxed_Number(dispatch::dispatch(t_funcs, params, t_conversions)).get_as(); + } + }; + + /** * Specialization for void return types */ template<> - struct Function_Caller_Ret + struct Function_Caller_Ret { static void call(const std::vector &t_funcs, const std::vector ¶ms, const Dynamic_Cast_Conversions &t_conversions) @@ -83,7 +96,7 @@ namespace chaiscript BOOST_PP_REPEAT(n, addparam, ~); - return Function_Caller_Ret::call(funcs, params, t_conversions); + return Function_Caller_Ret::value>::call(funcs, params, t_conversions); } /**