Namespaces
Variants

std::experimental:: when_any

From cppreference.net
Definido en el encabezado <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)

Cree un objeto future que esté listo cuando al menos una de las future s y shared_future s de entrada esté lista. El comportamiento es indefinido si cualquier future o shared_future de entrada no es válido.

En particular, sea Sequence un std:: vector < typename std:: iterator_traits < InputIt > :: value_type > para (1) y std:: tuple < std:: decay_t < Futures > ... > para (2) . Esta plantilla de función crea un estado compartido que contiene when_any_result<Sequence> y devuelve un futuro que referencia al estado compartido. Cada future de entrada es movido al objeto correspondiente en el miembro futures del when_any_result<Sequence> en el estado compartido, y cada shared_future de entrada es copiado al objeto correspondiente en el miembro futures del when_any_result<Sequence> en el estado compartido. El orden de los objetos en la Sequence coincide con el orden de los argumentos.

1) Esta función no participa en la resolución de sobrecarga a menos que InputIt 's tipo de valor (es decir, typename std:: iterator_traits < InputIt > :: value_type ) sea un std::experimental::future o std::experimental::shared_future .
2) Esta función no participa en la resolución de sobrecarga a menos que cada argumento sea un std::experimental::shared_future (posiblemente calificado cv) o un std::experimental::future no calificado cv. (Formalmente, para cada tipo Fn en Futures , o bien std:: remove_reference_t < Fn > es std:: experimental :: future < Rn > , o std:: decay_t < Fn > es std:: experimental :: shared_future < Rn > .)

Después de esta llamada, cada entrada future deja de ser válida; cada entrada shared_future permanece válida.

Valor de retorno

Un future que hace referencia al estado compartido creado por la llamada. El future siempre es valid ( ) , y se vuelve listo cuando al menos uno de los future s y shared_future s de entrada de la llamada está listo. El miembro index del when_any_result contiene la posición del future o shared_future listo en el miembro futures .

1) Si el rango está vacío (es decir, first == last ), el future devuelto está listo inmediatamente; el campo futures del when_any_result es un vector vacío, y el campo index es size_t ( - 1 ) .
2) Si no se proporciona ningún argumento, el future devuelto está listo inmediatamente; el campo futures del when_any_result es una tupla vacía, y el campo index es size_t ( - 1 ) .