Я вижу, что std::async
задается следующим образом:
template <class F, class... Args> // copied out of the standard
future<typename result_of<F(Args...)>::type>
async(F&& f, Args&&... args);
Я ожидал, что это будет объявлено так:
template <class F, class... Args>
auto async(F&& f, Args&&... args) ->
future<decltype(forward<F>(f)(forward<Args>(args)...)>;
Будет ли это эквивалентно, или есть способ, которым использование result_of
предпочтительнее использования decltype
? (Я понимаю, что result_of
работает с типами, а decltype
работает с выражениями.)