使用继承构造函数时出现 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? 这不是一个程序,您可以通过省略不必要的public
s 来提高代码的可读性: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