У меня есть следующий код:
#include <iostream>
class BaseClass {
protected:
static int x;
};
int BaseClass::x;
class DerivedA: public BaseClass {
public:
DerivedA() {
x = 3;
}
};
class DerivedB: public BaseClass {
public:
DerivedB() {
std::cout << DerivedA::x;
}
};
int main(int argc, char* argv[]) {
DerivedB b;
}
Компиляция с g++ (g++ classtest.cpp
) Я получаю следующую ошибку:
classtest.cpp: В конструкторе DerivedB:: DerivedB():
classtest.cpp: 9: 5: ошибка: 'int BaseClass:: x защищен
int BaseClass:: x;
^ classtest.cpp: 25: 32: ошибка: в этом контексте
std:: cout < DerivedA:: х;
Когда я компилирую с clang++ (clang++ classtest.cpp
), ошибки нет.
Почему g++ возвращает ошибку компиляции?
Я использую g++ version 5.1.0 и clang++ version 3.6.1