最有可能的一个不希望这个样本编译:“静态成员函数将覆盖基类的虚拟功能”通过gcc和铿锵而陷入没有VC++
#include <iostream>
class C {
public:
virtual void Foo() {
std::cout << "From C\n";
}
};
class D : public C {
public:
static void Foo() {
std::cout << "From D\n";
}
};
int main() {
D d;
d.Foo();
return 0;
}
它不会在GCC的确编译clang(错误“静态成员函数覆盖基类中的虚函数”)。但是,它确实在Visual C++中编译,发出从D到运行控制台。即使使用带有选项ISO C++最新草案标准(/ std:C++ latest)的最新VC++ RC 2017编译器(v141)和/permissive-(link)开启。
哪个编译器是正确的?这是标准的错误吗?如果是这样,这是否意味着VC++在这种情况下不遵循标准?
我相当确定这是违法的。最有可能是一个MSVC错误。此外,编译器版本通常是MSVC14.1或更具体的19.10.24930在我的安装。 – tambre