   {
     // -> void
 
-    auto f3 = when_all_execute([] __device__ (agency::cuda::grid_executor::index_type idx, int& outer_arg, int& inner_arg)
+    auto f3 = exec.when_all_execute_and_select([] __device__ (agency::cuda::grid_executor::index_type idx, int& outer_arg, int& inner_arg)
     {
     },
     shape,

    agency::cuda::future<int>   f1 = agency::cuda::make_ready_future<int>(7);
    agency::cuda::future<float> f2 = agency::cuda::make_ready_future<float>(13);

    auto f3 = when_all_execute([] __device__ (agency::cuda::grid_executor::index_type idx, int& past_arg1, float& past_arg2, int& outer_arg, int& inner_arg)
    {
      if(idx[0] == 0 && idx[1] == 0)
      {

    // void -> void
    agency::cuda::future<void> f1 = agency::cuda::make_ready_future();

    auto f3 = exec.when_all_execute_and_select<0>([] __device__ (agency::cuda::grid_executor::index_type idx, int& outer_arg, int& inner_arg)
    {
    },
    shape,
