diff --git a/src/libs/solutions/tasking/tasktree.cpp b/src/libs/solutions/tasking/tasktree.cpp index c8347af1bb8..348481c8fc9 100644 --- a/src/libs/solutions/tasking/tasktree.cpp +++ b/src/libs/solutions/tasking/tasktree.cpp @@ -956,8 +956,8 @@ void GroupItem::addChildren(const QList &children) GroupItem GroupItem::withTimeout(const GroupItem &item, milliseconds timeout, const GroupEndHandler &handler) { - const TimeoutTask::EndHandler taskHandler = handler - ? [handler](const milliseconds &) { handler(); } : TimeoutTask::EndHandler(); + const TimeoutTask::EndFunction taskHandler = handler + ? [handler](const milliseconds &) { handler(); } : TimeoutTask::EndFunction(); return Group { parallel, stopOnFinished, diff --git a/src/libs/solutions/tasking/tasktree.h b/src/libs/solutions/tasking/tasktree.h index 5b94cfc3099..99edad20272 100644 --- a/src/libs/solutions/tasking/tasktree.h +++ b/src/libs/solutions/tasking/tasktree.h @@ -324,17 +324,18 @@ public: static_assert(std::is_base_of_v, Adapter>, "The Adapter type for the CustomTask needs to be derived from " "TaskAdapter."); - using DoneHandler = std::function; - using EndHandler = std::function; + using SetupFunction = std::function; + using DoneFunction = std::function; + using EndFunction = std::function; static Adapter *createAdapter() { return new Adapter; } CustomTask() : GroupItem({&createAdapter}) {} - template - CustomTask(SetupHandler &&setup, const EndHandler &done = {}, const EndHandler &error = {}) + template + CustomTask(SetupHandler &&setup, const EndFunction &done = {}, const EndFunction &error = {}) : GroupItem({&createAdapter, wrapSetup(std::forward(setup)), wrapEnds(done, error)}) {} template - CustomTask(SetupHandler &&setup, const DoneHandler &done) + CustomTask(SetupHandler &&setup, const DoneFunction &done) : GroupItem({&createAdapter, wrapSetup(std::forward(setup)), wrapDone(done)}) {} @@ -346,6 +347,8 @@ public: private: template static GroupItem::TaskSetupHandler wrapSetup(SetupHandler &&handler) { + if constexpr (std::is_same_v>) + return {}; // When user passed {} for setup handler. static constexpr bool isDynamic = std::is_same_v, typename Adapter::TaskType &>>; constexpr bool isVoid = std::is_same_v