使用继承构造函数时出现 VS2015 内部编译器错误

Posted

技术标签:

【中文标题】使用继承构造函数时出现 VS2015 内部编译器错误【英文标题】:VS2015 Internal Compiler Error when using inheriting constructors 【发布时间】:2015-07-25 20:59:05 【问题描述】:

这是一个 10 行 C++11 程序,从我正在开发的程序中大大简化:

template <typename T> class Base  public:
    template <typename S> Base(S x) 
;
template <typename T> class Child : public Base<T>  public:
    using Base<T>::Base;
;
template <> class Child<int> : public Base<int>  public:
    using Base<int>::Base;
;

int main()

    Child<int> child(8.0f);

MSVC 2015 输出:

1>------ Build started: Project: MyProject, Configuration: Debug Win32 ------
1>  filename.cpp
1>path\to\filename(10): fatal error C1001: An internal error has occurred in the compiler.
1>  (compiler file 'msc1.cpp', line 1393)
1>   To work around this problem, try simplifying or changing the program near the locations listed above.
1>  Please choose the Technical Support command on the Visual C++
1>   Help menu, or open the Technical Support help file for more information

注意MSVC 2015 支持继承构造函数is new with that version。

我已经为此提交了一份错误报告,因为至少编译器不应该崩溃。但是,我可以确认这是正确的 C++ 用法/解决方法吗?

错误报告here

【问题讨论】:

@DavidHaim:这是一个继承构造函数声明。 您对MSCV还有什么期望?解决方法:改用合适的编译器,例如 clang。 什么是“MSCV”,@Walter? 这不是一个程序,您可以通过省略不必要的publics 来提高代码的可读性:coliru.stacked-crooked.com/a/164072087e303251 更进一步,我实际上建议将其稍长一些但间距更好:@ 987654324@ 只是一个想法。 @imallett 我认为您的连接错误报告需要更多详细信息。您至少应该提供错误消息(就像您在这里一样),而不仅仅是 smartass cmets。 【参考方案1】:

正如 cmets 中提到的,这似乎是一个 MSVC 问题。用 Clang 和 -std=c++11 快速编译,没有问题。

【讨论】:

@Creris:你错过了重点。它可能在 C++ 中格式不正确在编译器中触发 ICE。 OP正在询问是否是这种情况(不是)。 @LightnessRacesinOrbit 仍然存在 MVSC 问题,尽管程序不正确或不正确,它们不应导致内部错误 @Creris:是的,我们都知道。这不是这个问题的目的。 OP 只是询问程序是否格式错误。就是这样。 这是一件可怕的事情。在其他编译器中检查它并不能证明任何事情。只有标准报价才能真正证明它是正确的。此外,MSVC ICE 意味着这里显然存在 一些 MSVC 问题,但这不会使代码正确或不正确。 ICE 始终是编译器错误。如果 C++ 格式不正确,它应该触发编译错误或警告,而不是 ICE。在连接时提交错误。在命令 ilne 中,一定要运行 cl -Bv 以获取确切的版本号

以上是关于使用继承构造函数时出现 VS2015 内部编译器错误的主要内容,如果未能解决你的问题,请参考以下文章

日常记录用 vs2015 编译 love2d 引擎时出现 依赖项目luajit编译失败的解决办法

在 VS2015 中访问类成员时出现运行时错误,但在 Linux 上没有

VS2008 编译时出现的错误:无法打开编译器中间文件。如何解决?

调用自定义 Button 类的构造函数时出现 ClassCastException

使用 VS 2015 打开 VS 2017 项目时出现语法错误 [重复]

js中实现继承的方法