auto fun = device(int i)->float{
return
}
fun is a cuda lambda, how can I use type traits get its result type and argument type.
#include <tuple>
template <typename T>
struct function_traits
: public function_traits<decltype(&T::operator())>
{
typedef double type;
};
template <typename _ClassType, typename _ReturnType, typename... _Args>
struct function_traits<_ReturnType(_ClassType::*)(_Args...) const> {
enum { arguments_size = sizeof...(_Args) };
typedef _ReturnType result_type;
template <size_t _index>
struct arguments
{
typedef typename std::tuple_element<_index, std::tuple<_Args...>>::type type;
// the i-th argument is equivalent to the i-th tuple element of a tuple
// composed of those arguments.
};
};
int main() {
//auto fun = [] __host__ __device__(int i)->float {
// return 3.0f;
//}; compile OK!
auto fun = [] __device__(int i)->float {
return 3.0f;
}; // compile Error!
auto size = function_traits<decltype(fun)>::arguments_size;
}