     },
     agency::cuda::grid_executor::shape_type{100,256},
     agency::detail::make_tuple(std::move(f1),std::move(f2)),
-    outer_factory,
-    inner_factory);
+    factory,
+    factory);
 
     auto result = f3.get();
 

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

    auto outer_factory = factory{};
    auto inner_factory = factory{};

    auto f3 = when_all_execute([] __device__ (agency::cuda::grid_executor::index_type idx, int& outer_arg, int& inner_arg)
    {
    },
    agency::cuda::grid_executor::shape_type{100,256},
    agency::detail::make_tuple(std::move(f1), std::move(f2)),
    outer_factory,
    inner_factory);

    f3.get();
  }

  {
    // -> void
    auto outer_factory = factory{};
    auto inner_factory = factory{};

    auto f3 = when_all_execute([] __device__ (agency::cuda::grid_executor::index_type idx, int& outer_arg, int& inner_arg)
    {
    },
    agency::cuda::grid_executor::shape_type{100,256},
    agency::detail::make_tuple(),
    outer_factory,
    inner_factory);

    f3.get();
  }

    // int, void -> int
    agency::cuda::future<int>  f1 = agency::cuda::make_ready_future<int>(7);
    agency::cuda::future<void> f2 = agency::cuda::make_ready_future();

    auto f3 = when_all_execute([] __device__ (agency::cuda::grid_executor::index_type idx, int& past_arg, int& outer_arg, int& inner_arg)
    {
