 
   using result_type = typename std::pointer_traits<ResultPointer>::element_type;
 
-  __host__ __device__
+  __AGENCY_ANNOTATION
   move_construct_result_functor(ResultPointer result_ptr, Pointers... ptrs)
     : result_ptr_(result_ptr),
       ptrs_(ptrs...)
   {}
 
   template<size_t... Indices>
-  __host__ __device__
+  __AGENCY_ANNOTATION
   inline void impl(agency::detail::index_sequence<Indices...>)
   {
     *result_ptr_ = result_type(std::move(*agency::detail::get<Indices>(ptrs_))...);
   }
 
-  __host__ __device__
+  __AGENCY_ANNOTATION
   inline void operator()()
   {
     impl(agency::detail::index_sequence_for<Pointers...>());

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

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

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

    // 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)
    {
