#include <iostream>
#include <string>
class Base
{
static std::string s;
};
template<typename T>
class Derived
: Base
{
public:
Derived()
{
std::cout << s << std::endl;
}
};
std::string Base::s = "some_text";
int main()
{
Derived<int> obj;
}
Эти программы компилируются и запускаются нормально. статическая переменная s
является частной в базовом классе, которая наследуется в частном порядке. Как класс Derived получает доступ к нему?
Если класс Derived не является шаблоном, компилятор жалуется на доступ к частной переменной.
[[email protected] c++]$ g++ --version
g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.