diff --git a/libraries/meta_refl/include/bluegrass/meta/function_traits.hpp b/libraries/meta_refl/include/bluegrass/meta/function_traits.hpp index 5f2ba12d24..6622432cc7 100644 --- a/libraries/meta_refl/include/bluegrass/meta/function_traits.hpp +++ b/libraries/meta_refl/include/bluegrass/meta/function_traits.hpp @@ -76,6 +76,9 @@ namespace bluegrass { namespace meta { inline constexpr U&& make_dependent(U&& u) { return static_cast(u); } } + template + constexpr bool is_callable(F&& fn) { return BLUEGRASS_HAS_MEMBER(fn, operator()); } + namespace detail { template constexpr auto get_types(R(Args...)) -> std::tuple, Args>...>>; template constexpr auto get_types(F&& fn) { - if constexpr (std::is_invocable::value) + if constexpr (is_callable(fn)) return get_types(&F::operator()); else return get_types(fn); @@ -142,7 +145,7 @@ namespace bluegrass { namespace meta { constexpr auto parameters_from_impl(R(Cls::*)(Args...)const &&) -> pack_from_t; template constexpr auto parameters_from_impl(F&& fn) { - if constexpr (std::is_invocable::value) + if constexpr (is_callable(fn)) return parameters_from_impl(&F::operator()); else return parameters_from_impl(fn);