我正在尝试编写让我索引到函数的参数类型的代码:
template <typename R, typename... ARGS>
R function_return(R(*)(ARGS...));
template <typename R, typename... ARGS>
std::tuple<ARGS...> function_parameters(R(*)(ARGS...));
template <int I, typename T>
using get_type = typename std::conditional_t<(I < 0), std::tuple_element<static_cast<int>(std::tuple_size_v<T>) + I, T>, std::tuple_element<I, T>>::type;
template <int I, typename T>
using parameter_type = get_type<I, decltype(function_parameters(std::declval<T>()))>;
Live Example (ICE under VS) Live Example (working on GCC)
但是当我尝试在visual-studio-2017上使用它时,我得到一个内部编译器错误:
致命错误 C1001:编译器发生内部错误。
还有另一种方法可以解决内部编译器错误吗?