std::experimental::when_all
From cppreference.com
< cpp | experimental
| ヘッダ <experimental/future>で定義 |
||
| template< class InputIt > auto when_all( InputIt first, InputIt last ) |
(1) | (concurrency TS) |
| template< class... Futures > auto when_all( Futures&&... futures ) |
(2) | (concurrency TS) |
すべての入力 `future` および `shared_future` が準備完了になったときに準備完了になる `future` オブジェクトを作成します。いずれかの入力 `future` または `shared_future` が無効な場合、動作は未定義です。
特に、`(1)` の場合は `Sequence` を `std::vector
1) `InputIt` の値型(すなわち、`typename std::iterator_traits::value_type`)が `std::experimental::future` または `std::experimental::shared_future` である場合を除き、この関数はオーバーロード解決に参加しません。
2) すべての引数が、(cv 修飾されている可能性のある) `std::experimental::shared_future` または cv 修飾されていない `std::experimental::future` のいずれかである場合を除き、この関数はオーバーロード解決に参加しません。(形式的には、`Futures` 内の各型 `Fn` について、`std::remove_reference_t` が `std::experimental::future` であるか、または `std::decay_t` が `std::experimental::shared_future` である。)
この呼び出しの後、すべての入力 `future` は無効になります。すべての入力 `shared_future` は有効なままです。
[編集] 戻り値
呼び出しによって作成された共有状態を参照する `future`。この future は常に `valid()` であり、呼び出しのすべての入力 `future` および `shared_future` が準備完了になったときに準備完了になります。
1) 範囲が空の場合(すなわち、`first == last`)、返される `future` は空の vector を含み、すぐに準備完了になります。
2) 引数が指定されていない場合、`future>` が返され、すぐに準備完了になります。