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

9

这是一段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支持继承构造函数是从该版本开始的。

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

错误报告在这里


2
@DavidHaim:这是一个继承构造函数声明。 - Kerrek SB
2
你还期待MSCV提供什么?解决方法:使用像clang这样的优秀编译器。 - Walter
1
"Walter,什么是“MSCV”?" - Lightness Races in Orbit
1
就我个人而言,我不认为将其变得难以阅读有任何价值。 - Lightness Races in Orbit
3
我认为你的连接错误报告需要更多细节。你应该至少提供错误信息(就像你在这里做的那样),而不仅仅是聪明的评论。 - Jonathan Potter
显示剩余13条评论
1个回答

6

如评论中所述,这似乎是MSVC的问题。使用Clang和-std=c++11快速编译,就没有出现问题。


如果是内部编译器错误,很有可能不符合标准规定,显然这是MSVC的问题。 - Creris
4
你漏掉了重点。它可能在C ++中形式不正确并触发编译器中的ICE。 OP正在询问是否是这种情况(不是)。 - Lightness Races in Orbit
1
@LightnessRacesinOrbit 还是 MVSC 的问题,无论程序是否正确或不正确,都不应该导致内部错误。 - Creris
2
@Creris:是的,我们都知道这一点。但这不是这个问题所关心的。楼主只是在问这个程序是否有语法错误。就这样。 - Lightness Races in Orbit
5
这是一件很糟糕的事情。在其他编译器中检查并不能证明什么。只有标准引用才能真正证明代码的正确性。此外,MSVC发生内部编译错误意味着这里显然存在某些MSVC问题,但这并不意味着代码正确或不正确。 - Puppy
3
ICE总是编译器错误。如果C++代码不符合规范,应该触发编译错误或警告,而不是ICE(意外中止)。请在connect上报告此问题。从命令行中,请务必运行“cl -Bv”以获取确切的版本号。 - Chuck Walbourn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接