Доступ к любому статическому члену через имя класса и точку, к сожалению, был разрешен в предыдущих версиях MSVC.
#include <iostream>
struct A
{
static int a;
};
int A::a;
int main()
{
std::cout << A.a;
}
Этот код успешно принят MSVC9.0 с предупреждением
Предупреждение 1, предупреждение C4832: токен '.'недопустимо после UDT 'A'
Стандарт C ++ явно запрещает доступ к статическому члену через className.memberName
(хотя он является совершенно законным для доступа к статическому члену через объектobject.staticMemberName
).
Мой здравый смысл говорит мне, что если MSVC осознает, что это не стандартно, и выдает предупреждение, то мы можем отключить это расширение.Идем к Project Propertied -> C/C++ -> Language
и устанавливаем Disable Language Extensions
на Yes
.Как вы думаете, что-нибудь меняется?Конечно, нет, компилятор все еще принимает недопустимый код с тем же предупреждением.Я иногда задаюсь вопросом, что на самом деле делает Disable Language Extensions