diff --git a/src/entt/signal/delegate.hpp b/src/entt/signal/delegate.hpp index 7143c9f8d..730f4dcd1 100644 --- a/src/entt/signal/delegate.hpp +++ b/src/entt/signal/delegate.hpp @@ -64,9 +64,12 @@ class delegate; */ template class delegate { + using return_type = std::remove_const_t; + using delegate_type = return_type(const void *, Args...); + template [[nodiscard]] auto wrap(std::index_sequence) noexcept { - return [](const void *, Args... args) -> Ret { + return [](const void *, Args... args) -> return_type { [[maybe_unused]] const auto arguments = std::forward_as_tuple(std::forward(args)...); [[maybe_unused]] constexpr auto offset = !std::is_invocable_r_v>...> * (sizeof...(Args) - sizeof...(Index)); return static_cast(std::invoke(Candidate, std::forward>>(std::get(arguments))...)); @@ -75,7 +78,7 @@ class delegate { template [[nodiscard]] auto wrap(Type &, std::index_sequence) noexcept { - return [](const void *payload, Args... args) -> Ret { + return [](const void *payload, Args... args) -> return_type { Type *curr = static_cast(const_cast *>(payload)); [[maybe_unused]] const auto arguments = std::forward_as_tuple(std::forward(args)...); [[maybe_unused]] constexpr auto offset = !std::is_invocable_r_v>...> * (sizeof...(Args) - sizeof...(Index)); @@ -85,7 +88,7 @@ class delegate { template [[nodiscard]] auto wrap(Type *, std::index_sequence) noexcept { - return [](const void *payload, Args... args) -> Ret { + return [](const void *payload, Args... args) -> return_type { Type *curr = static_cast(const_cast *>(payload)); [[maybe_unused]] const auto arguments = std::forward_as_tuple(std::forward(args)...); [[maybe_unused]] constexpr auto offset = !std::is_invocable_r_v>...> * (sizeof...(Args) - sizeof...(Index)); @@ -134,7 +137,7 @@ public: instance = nullptr; if constexpr(std::is_invocable_r_v) { - fn = [](const void *, Args... args) -> Ret { + fn = [](const void *, Args... args) -> return_type { return Ret(std::invoke(Candidate, std::forward(args)...)); }; } else if constexpr(std::is_member_pointer_v) { @@ -164,7 +167,7 @@ public: instance = &value_or_instance; if constexpr(std::is_invocable_r_v) { - fn = [](const void *payload, Args... args) -> Ret { + fn = [](const void *payload, Args... args) -> return_type { Type *curr = static_cast(const_cast *>(payload)); return Ret(std::invoke(Candidate, *curr, std::forward(args)...)); }; @@ -188,7 +191,7 @@ public: instance = value_or_instance; if constexpr(std::is_invocable_r_v) { - fn = [](const void *payload, Args... args) -> Ret { + fn = [](const void *payload, Args... args) -> return_type { Type *curr = static_cast(const_cast *>(payload)); return Ret(std::invoke(Candidate, curr, std::forward(args)...)); }; @@ -279,7 +282,7 @@ public: private: const void *instance{}; - function_type *fn{}; + delegate_type *fn{}; }; /**