diff --git a/src/entt/signal/sigh.hpp b/src/entt/signal/sigh.hpp index 39db09311..7bd205694 100644 --- a/src/entt/signal/sigh.hpp +++ b/src/entt/signal/sigh.hpp @@ -24,26 +24,6 @@ namespace entt { namespace internal { -template -struct invoker; - - -template -struct invoker { - bool invoke(Collector &collector, const delegate &delegate, Args... args) const { - return collector(delegate(args...)); - } -}; - - -template -struct invoker { - bool invoke(Collector &, const delegate &delegate, Args... args) const { - return (delegate(args...), true); - } -}; - - template struct null_collector { using result_type = Ret; @@ -251,7 +231,7 @@ private: * @tparam Collector Type of collector to use, if any. */ template -struct sigh: private internal::invoker { +struct sigh { /*! @brief Unsigned integer type. */ using size_type = typename std::vector>::size_type; /*! @brief Collector type. */ @@ -318,8 +298,16 @@ struct sigh: private internal::invokerinvoke(collector, call, args...)) { - break; + if constexpr(std::is_void_v) { + call(args...); + + if(!collector()) { + break; + } + } else { + if(!collector(call(args...))) { + break; + } } }