【发布时间】:2019-10-16 04:23:06
【问题描述】:
我正在尝试编写代码来索引函数的参数类型:
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:编译器发生内部错误。
还有其他方法可以解决内部编译器错误吗?
【问题讨论】:
-
已经提交了错误单?也就是说,您的代码中有一件事是我要避免的:将
ALL_UPPERCASE用于常规标识符。如果任何 win32 标头以某种方式泄漏到该代码中,您会得到一堆带有它的宏,其中一些是完全邪恶的。 -
@UlrichEckhardt 现场示例给出了输出,而 obvs 没有 ICE。该错误在 VS 中而不在 GCC 6.3 中
-
不过,我得说it works for me。
-
您可以在 godbolt.org 上展示示例或上传到其他一些实际使用 MSVC 的在线编译器站点。
-
可以升级到VS2019吗? :D
标签: visual-studio-2017 c++ visual-studio-2017 function-parameter template-variables internal-compiler-error