Documentation Home >> Headers >> <jss/experimental_future.hpp> Header >> std::experimental::when_any function template

std::experimental::when_any combines a set of futures into a single future that becomes ready when any of the futures in the set become ready.

template<typename ... FutureTypes>
std::experimental::future<std::experimental::when_any_result<std::tuple<FutureTypes...> > >
when_any(FutureTypes&&... futures);


Each type in FutureTypes is an instantiation of either std::experimental::future or std::experimental::shared_future. For each value in futures a call to valid() must return true. Any future which is an instantation of std::experimental::future must be passed as an rvalue.


The supplied futures are transferred into internal storage. The asynchronous result associated with each future is marked so that when any of the futures are ready the future returned from when_any is ready. If any of the futures are already ready at the point of the call, the returned future will also be ready.


A std::experimental::future<std::experimental::when_any_result<std::tuple<FutureTypes> > > which becomes ready when any of the supplied futures becomes ready. When the future is ready, the stored value's sequence member is a std::tuple holding the supplied futures, and the index member holds the index of the future that caused the result to become 'ready.


The marking of the first future as ready synchronizes with any call to wait() or get() on the returned future that sees the result as ready.


std::bad_alloc if the required internal storage cannot be allocated.


#include <experimental/future>

See Also