错误 C1001:编译器中发生内部错误

Error C1001: An internal error has occurred in the compiler

本文关键字:错误 内部 编译器 C1001      更新时间:2023-10-16

我在C++模板化任务中有一个虚拟函数,当它在Visual Studio 2015中编译时(我已经尝试了调试/发布和x86/x64的所有组合),它总是失败,并在以下代码行上出现编译器错误C1001:

e_Ty *d(new e_Ty[l]);

其中e_Ty是类的模板参数。仅当我使用e_Ty设置为 std::pair<const int &, int &> 的模板类时,才会发生此错误。是否有合法的理由说明这不应该起作用,或者这是 MSVC 中的错误?


编辑

笔记:

  • l 是提前声明(并作为函数调用的结果分配值)的局部变量。
  • 我尝试使用禁用优化、使用 auto 和使用赋值式初始化,但都不起作用。
  • e_Ty int时,代码编译良好。

内部编译器错误(ICE始终是一个错误。

请通过Microsoft连接报告。


有问题的代码,

e_Ty *d(new e_Ty[l]);

...

可能是正确的,也可能是不正确的,这取决于l,是否包含适当的标题,等等。上下文太少了。对于作为引用std::pair e_Ty无效,因为引用需要初始化,如 T.C. 所述。但这对ICE来说并不重要。

值得一看的是它是否与以下方面有关:C++11 constexpr 导致编译器的内部错误 (C1001)

如果涉及 constexpr,则报告VS2015和VS2017编译器在与模板代码一起使用时崩溃。