# `std::packaged_task` 的推导指引

< cpp‎ | thread‎ | packaged task

定义于头文件 `<future>` |  |
template<class R, class... Args> packaged_task(R(*)(Args...)) -> packaged_task<R(Args...)>; | (1) | (C++17 起)
template<class F> packaged_task(F) -> packaged_task</*see below*/>; | (2) | (C++17 起)

1) 为 std::packaged_task 提供此推导指引以允许从函数推导。
2) 此重载仅若 &F::operator() 在作为不求值运算数时为良构且 decltype(&F::operator()) 拥有形式 R(G::*)(A...) （可选地有 cv 限定，可选地有 noexcept ， 可选地有左值引用限定）而 `G` 为类类型才参与重载决议。推导类型为 std::packaged_task<R(A...)> 。

### 示例

    #include <future>
    int func(double) { return 0; }
    int main() {
      std::packaged_task f{func}; // 推导出 packaged_task<int(double)>
      int i = 5;
      std::packaged_task g = [&](double) { return i; }; // 推导出 packaged_task<int(double)>
    }