HPX - High Performance ParalleX


Function template when_some



// In header: <hpx/lcos/when_some.hpp>

template<typename R> 
  future< when_some_result< std::vector< future< R > > > > 
  when_some(std::size_t n, std::vector< future< R >> && futures, 
            error_code & ec = throws);


The function when_some is an operator allowing to join on the result of all given futures. It AND-composes all future objects given and returns a new future object representing the same list of futures after n of them finished executing.

[Note] Note

The future returned by the function when_some becomes ready when at least n argument futures have become ready.

[Note] Note

Each future and shared_future is waited upon and then copied into the collection of the output (returned) future, maintaining the order of the futures in the input collection. The future returned by when_some will not throw an exception, but the futures held in the output collection may.



[in,out] this represents the error status on exit, if this is pre-initialized to hpx::throws the function will throw on error instead.


[in] A vector holding an arbitrary amount of future or shared_future objects for which when_some should wait.


[in] The number of futures out of the arguments which have to become ready in order for the returned future to get ready.


Returns a when_some_result holding the same list of futures as has been passed to when_some and indices pointing to ready futures.

  • future<when_some_result<vector<future<R>>>>: If the input cardinality is unknown at compile time and the futures are all of the same type. The order of the futures in the output vector will be the same as given by the input iterator.