【问题标题】:Error C1001: An internal error has occurred in the compiler错误 C1001:编译器发生内部错误
【发布时间】:2016-06-02 21:38:20
【问题描述】:

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

e_Ty *d(new e_Ty[l]);

其中e_Ty 是类的模板参数。仅当我使用将e_Ty 设置为std::pair<const int &, int &> 的模板类时才会出现此错误。是否有正当理由为什么这不起作用,或者这是 MSVC 中的错误?


编辑

注意事项:

  • l 是一个局部变量,它是提前声明的(并作为函数调用的结果赋值)。
  • 我尝试过使用禁用优化、使用auto 和使用赋值式初始化,但均无效。
  • e_Tyint 时,代码编译良好。

【问题讨论】:

  • 无论如何,这都是格式错误的代码。您究竟如何创建一对引用而不将它们绑定到任何东西?
  • @T.C.:谢谢,我没有注册该类型。相应地修正了我的答案。
  • @T.C.谢谢,我将其更改为使用std::pair<int, int> 并且有效。

标签: c++ templates visual-c++ visual-studio-2015 visual-c++-2015


【解决方案1】:

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

请通过 Microsoft Connect 报告。


有问题的代码,

e_Ty *d(new e_Ty[l]);

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

【讨论】:

  • 谢谢,我会提交给微软的。另外,我编辑了我的问题以澄清l 是一个局部变量,并且它适用于int
  • 一个内部编译器错误,一个 ICE,总是一个错误。 无论如何,有人会称它为一个特性。 :-)
  • 请参阅this article 了解有关制作良好复制的详细信息
【解决方案2】:

值得一看是否与以下内容有关: C++11 constexpr causes compiler's internal error (C1001)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    相关资源
    最近更新 更多