diff --git a/src/entt/meta/meta.hpp b/src/entt/meta/meta.hpp index cff472854..bb67a3ab7 100644 --- a/src/entt/meta/meta.hpp +++ b/src/entt/meta/meta.hpp @@ -2035,37 +2035,39 @@ bool setter([[maybe_unused]] meta_handle handle, [[maybe_unused]] meta_any &any) bool accepted = false; if constexpr(Const) { - return false; - } else if constexpr(std::is_function_v> || std::is_member_function_pointer_v) { - using helper_type = meta_function_helper>; - using data_type = std::decay_t, typename helper_type::args_type>>; - static_assert(std::is_invocable_v); - accepted = any.can_cast() || any.convert(); - auto *clazz = handle.try_cast(); - - if(accepted && clazz) { - std::invoke(Data, clazz, any.cast()); - } - } else if constexpr(std::is_member_object_pointer_v) { - using data_type = std::decay_t().*Data)>; - static_assert(std::is_invocable_v); - accepted = any.can_cast() || any.convert(); - auto *clazz = handle.try_cast(); - - if(accepted && clazz) { - std::invoke(Data, clazz) = any.cast(); - } + return accepted; } else { - static_assert(std::is_pointer_v); - using data_type = std::decay_t; - accepted = any.can_cast() || any.convert(); + if constexpr(std::is_function_v> || std::is_member_function_pointer_v) { + using helper_type = meta_function_helper>; + using data_type = std::decay_t, typename helper_type::args_type>>; + static_assert(std::is_invocable_v); + accepted = any.can_cast() || any.convert(); + auto *clazz = handle.try_cast(); - if(accepted) { - *Data = any.cast(); + if(accepted && clazz) { + std::invoke(Data, clazz, any.cast()); + } + } else if constexpr(std::is_member_object_pointer_v) { + using data_type = std::decay_t().*Data)>; + static_assert(std::is_invocable_v); + accepted = any.can_cast() || any.convert(); + auto *clazz = handle.try_cast(); + + if(accepted && clazz) { + std::invoke(Data, clazz) = any.cast(); + } + } else { + static_assert(std::is_pointer_v); + using data_type = std::decay_t; + accepted = any.can_cast() || any.convert(); + + if(accepted) { + *Data = any.cast(); + } } - } - return accepted; + return accepted; + } }