Скорее всего один не хочет, чтобы этот пример компиляции:«Статическая функция член переопределяет виртуальную функцию базового класса» пойманной НКУ и лязгом, но не 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;
}
Это не компилируется действительно в НКУ и clang (Ошибка «Статическая функция-член переопределяет виртуальную функцию в базовом классе»). Однако он компилируется в Visual C++, вызывая От D до консоли при запуске. Даже с последним компилятором VC++ RC 2017 (v141) с опциями ISO C++. Последний проект стандарта (/ std: C++ latest) и /permissive- (link) включен.
Какой компилятор прав? Является ли эта ошибка стандартом? Если да, значит ли это, что VC++ не соответствует стандарту в этом случае?
Я уверен, что это незаконно. Скорее всего, ошибка MSVC. Кроме того, версия компилятора обычно представляет собой MSVC14.1 или более конкретно 19.10.24930 при моей установке. – tambre