cuda::proclaim_return_type
Defined in the header <cuda/functional>
:
template <class Ret, class Fn>
__host__ __device__
unspecified<Ret, Fn> proclaim_return_type(Fn&& fn) {
return unspecified<Ret, Fn>{fn};
}
cuda::proclaim_return_type
creates a forwarding call wrapper that uses Ret
as a return type. The wrapper is useful in the case of extended device lambdas since an attempt to determine the return type of their operator()
function may work incorrectly in host code.
Template Parameters
Ret | Return type that’s being proclaimed |
Fn | Callable object type that’s being wrapped |
Parameters
fn | Callable object that’s being wrapped |
Example
#include <cuda/functional>
template <class T, class Fn>
__global__ void example_kernel(T *out, Fn fn) {
*out = fn();
}
__host__ void example() {
auto fn = cuda::proclaim_return_type<char>([] __device__ () { return 'd'; });
using rt = cuda::std::invoke_result_t<decltype(fn)>;
rt* out {};
cudaMalloc(&out, sizeof(rt));
example_kernel<<<1, 1>>>(out, fn);
// ...
}