Replace the use of result_of_t with invoke_result_t (#1397)

* Fix C++20 incompatibility

* Fix C++20 incompatibility
This commit is contained in:
xnorai 2024-09-06 19:52:57 -07:00 committed by GitHub
parent efeb9c0f02
commit dc627dcb5e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -37,7 +37,7 @@ class ThreadPool {
ThreadPool(size_t);
template <class F, class... Args>
auto enqueue(F&& f, Args&&... args)
-> std::future<typename std::result_of_t<F(Args...)>>;
-> std::future<typename std::invoke_result_t<F, Args...>>;
~ThreadPool();
private:
@ -71,8 +71,8 @@ inline ThreadPool::ThreadPool(size_t threads) : stop(false) {
template <class F, class... Args>
auto ThreadPool::enqueue(F&& f, Args&&... args)
-> std::future<typename std::result_of_t<F(Args...)>> {
using return_type = typename std::result_of_t<F(Args...)>;
-> std::future<typename std::invoke_result_t<F, Args...>> {
using return_type = typename std::invoke_result_t<F, Args...>;
auto task = std::make_shared<std::packaged_task<return_type()>>(
std::bind(std::forward<F>(f), std::forward<Args>(args)...));