Что не так с reallyAsync4? Почему она не компилируется? Я понимаю, что reallyAsync3 и reallyAsync4 не будут работать с указателями на членов класса, как объясняется здесь: https://stackoverflow.com/questions/15673792/whats-the-difference-between-res..., но меня интересует просто синтаксис.. Где в reallyAsync4 ошибка и как ее написать правильно без использования result_of?
#include <iostream>
#include <future>
using namespace std;
using namespace literals;
template<typename F, typename... Ts>
future<typename result_of<F(Ts...)>::type>
reallyAsync(F&& f, Ts&&... params)
{
return async(launch::async,
forward<F>(f),
forward<Ts>(params)...);
}
template<typename F, typename... Ts>
auto reallyAsync2(F&& f, Ts&&... params)
-> future<typename result_of<F(Ts...)>::type>
{
return async(launch::async,
forward<F>(f),
forward<Ts>(params)...);
}
template<typename F, typename... Ts>
auto reallyAsync3(F&& f, Ts&&... params)
-> future<decltype(forward<F>(f)(forward<Ts>(params)...))>
{
return async(launch::async,
forward<F>(f),
forward<Ts>(params)...);
}
/*
template<typename F, typename... Ts>
typename future<decltype(declval<F>()(declval<Ts>()...))>
reallyAsync4(F&& f, Ts&&... params)
{
return async(launch::async,
forward<F>(f),
forward<Ts>(params)...);
}
*/
template<typename F, typename... Ts>
auto reallyAsync5(F&& f, Ts&&... params)
{
return async(launch::async,
forward<F>(f),
forward<Ts>(params)...);
}
int main(int argc, char *argv[])
{
auto fut = reallyAsync5([]()
{
while (true)
{
cout << "In thread" << endl;
this_thread::sleep_for(1s);
}
});
return 0; // won't happen
}