Namespaces
Variants

std::experimental:: when_any

From cppreference.net
ヘッダーで定義 <experimental/future>
template < class Sequence >

struct when_any_result {
std:: size_t index ;
Sequence futures ;

} ;
(concurrency TS)
template < class InputIt >

auto when_any ( InputIt first, InputIt last )

- > future < when_any_result < std:: vector < typename std:: iterator_traits < InputIt > :: value_type >>> ;
(1) (concurrency TS)
template < class ... Futures >

auto when_any ( Futures && ... futures )

- > future < when_any_result < std:: tuple < std:: decay_t < Futures > ... >>> ;
(2) (concurrency TS)

入力された future および shared_future の少なくとも1つが準備完了状態になったときに準備完了となる future オブジェクトを作成します。入力された future または shared_future が無効な場合、動作は未定義です。

特に、 Sequence std:: vector < typename std:: iterator_traits < InputIt > :: value_type > とし、 (1) ではこれを、 std:: tuple < std:: decay_t < Futures > ... > とし、 (2) ではこれを指す。この関数テンプレートは when_any_result<Sequence> を含む共有状態を作成し、その共有状態を参照するfutureを返す。各入力 future は共有状態内の when_any_result<Sequence> futures メンバ内の対応するオブジェクトに移動され、各入力 shared_future は共有状態内の when_any_result<Sequence> futures メンバ内の対応するオブジェクトにコピーされる。 Sequence 内のオブジェクトの順序は引数の順序と一致する。

1) この関数は、以下の条件が満たされない限りオーバーロード解決に参加しません: InputIt の値型(すなわち、 typename std:: iterator_traits < InputIt > :: 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 < Fn > std:: experimental :: future < Rn > であるか、または std:: decay_t < Fn > std:: experimental :: shared_future < Rn > であるかのいずれかです。)

この呼び出しの後、すべての入力 future は無効になります。すべての入力 shared_future は有効なままです。

戻り値

future が参照する共有状態は、この呼び出しによって作成されます。このfutureは常に valid ( ) であり、入力された future および shared_future のうち少なくとも1つが準備完了状態になると、このfutureも準備完了状態になります。 when_any_result index メンバは、 futures メンバ内で準備完了状態となった future または shared_future の位置を示します。

1) 範囲が空の場合(すなわち、 first == last )、返される future は即座に準備完了状態となる; when_any_result futures フィールドは空のベクターであり、 index フィールドは size_t ( - 1 ) となる。
2) 引数が提供されない場合、返される future は即座に準備完了状態となる; when_any_result futures フィールドは空のタプルとなり、 index フィールドは size_t ( - 1 ) となる。