 using when_all_execute_result_t = typename when_all_execute_result<TupleOfFutures>::type;
 
 
-template<class Function, class TupleOfFutures, class OuterFactory, class InnerFactory>
+template<class Function, class Shape, class TupleOfFutures, class OuterFactory, class InnerFactory>
 agency::cuda::future<
   when_all_execute_result_t<
     typename std::decay<TupleOfFutures>::type
   >
 >
-  when_all_execute(Function f, agency::cuda::grid_executor::shape_type shape, TupleOfFutures&& futures, OuterFactory outer_factory, InnerFactory inner_factory)
+  when_all_execute(Function f, Shape shape, TupleOfFutures&& futures, OuterFactory outer_factory, InnerFactory inner_factory)
 {
   auto indices = agency::detail::make_tuple_indices(futures);
   return ::when_all_execute_and_select_impl(indices, indices, f, shape, std::move(futures), outer_factory, inner_factory);

using new_when_all_result_t = typename new_when_all_result<Types...>::type;


template<class Function, class OuterArgPointer, class InnerFactory, class... Pointers>
agency::cuda::detail::event
  launch_when_all_execute_operation_impl(agency::cuda::detail::event& dependency, Function f, agency::cuda::grid_executor::shape_type shape, OuterArgPointer outer_arg_ptr, InnerFactory inner_factory, Pointers... ptrs)
{
  cudaStream_t stream = 0;


  }
};


template<class ResultPointer, class... Pointers>
__AGENCY_ANNOTATION
move_construct_result_functor<ResultPointer,Pointers...>
