diff --git a/include/chaiscript/dispatchkit/proxy_functions.hpp b/include/chaiscript/dispatchkit/proxy_functions.hpp index 507abb6..e7a8ad9 100644 --- a/include/chaiscript/dispatchkit/proxy_functions.hpp +++ b/include/chaiscript/dispatchkit/proxy_functions.hpp @@ -705,14 +705,40 @@ namespace chaiscript if (bv.is_const()) { const Class *o = boxed_cast(bv, &t_conversions); - return detail::Handle_Return::type>::handle(o->*m_attr); + return do_call_impl(o); } else { Class *o = boxed_cast(bv, &t_conversions); - return detail::Handle_Return::type>::handle(o->*m_attr); + return do_call_impl(o); } } private: + template + auto do_call_impl(Class *o) const -> std::enable_if_t::value, Boxed_Value> + { + return detail::Handle_Return::handle(o->*m_attr); + } + + template + auto do_call_impl(const Class *o) const -> std::enable_if_t::value, Boxed_Value> + { + return detail::Handle_Return::handle(o->*m_attr); + } + + template + auto do_call_impl(Class *o) const -> std::enable_if_t::value, Boxed_Value> + { + return detail::Handle_Return::type>::handle(o->*m_attr); + } + + template + auto do_call_impl(const Class *o) const -> std::enable_if_t::value, Boxed_Value> + { + return detail::Handle_Return::type>::handle(o->*m_attr); + } + + + static std::vector param_types() { return {user_type(), user_type()};