std::experimental::when_all

出自cppreference.com
在標頭 <experimental/future> 定義
template< class InputIt >
auto when_all( InputIt first, InputIt last )
    -> future<std::vector<typename std::iterator_traits<InputIt>::value_type>>;
(1) (並發 TS)
template< class... Futures >
auto when_all( Futures&&... futures )
    -> future<std::tuple<std::decay_t<Futures>...>>;
(2) (並發 TS)

創建 std::experimental::future 對象,它將在所有輸入 futurestd::experimental::shared_future 就緒後變為就緒。若任何輸入 futureshared_future 非法則行為未定義。

具體而言,令 Sequence(1)std::vector<typename std::iterator_traits<InputIt>::value_type>,對 (2)std::tuple<std::decay_t<Futures>...>。此函數模板創建含 Sequence 的共享狀態,並返回指代該共享狀態的 future。移動每個輸入 future 到共享狀態中的 Sequence 的對應對象中,複製每個輸入 shared_future 到共享狀態中的 Sequence 中的對應對象。Sequence 中的對象順序匹配實參的順序。

1) 此函數僅若 InputIt 的值類型(即 typename std::iterator_traits<InputIt>::value_type)為 std::experimental::futurestd::experimental::shared_future 才參與重載決議。
2) 此函數僅若每個實參為(可有 cv 限定的)std::experimental::shared_future 或無 cv 限定的 std::experimental::future 才參與重載決議(正式而言,對於 Futures 中的每個 Fn,要麼 std::remove_reference_t<Fn>std::experimental::future<Rn>,要麼 std::decay_t<Fn>std::experimental::shared_future<Rn>)。

此調用後,每個輸入 future 不再合法;每個輸入 shared_future 保持合法。

返回值

指代調用所創建的共享狀態的 future。該 future 始終 valid(),而它在調用的所有輸入 futureshared_future 就緒時變為就緒。

1) 若範圍為空(即 first == last),則返回的 future 含有空 vector 且立即就緒。
2) 若不提供實參,則返回 future<std::tuple<>> 且立即就緒。