     // void -> void
     agency::cuda::future<void> f1 = 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)),
-    outer_factory,
-    inner_factory);
+    factory,
+    factory);
 
     f3.get();
   }


  using result_type = typename std::pointer_traits<ResultPointer>::element_type;

  __host__ __device__
  move_construct_result_functor(ResultPointer result_ptr, Pointers... ptrs)
    : result_ptr_(result_ptr),
      ptrs_(ptrs...)
  {}

  template<size_t... Indices>
  __host__ __device__
  inline void impl(agency::detail::index_sequence<Indices...>)
  {
    *result_ptr_ = result_type(std::move(*agency::detail::get<Indices>(ptrs_))...);
  }

  __host__ __device__
  inline void operator()()
  {
    impl(agency::detail::index_sequence_for<Pointers...>());

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

    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)),
    factory,
    factory);

    f3.get();
  }

  {
    // -> void

    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(),
    factory,
    factory);

    f3.get();
  }
