Рассмотрим:
template <typename T>
class Base
{
public:
static const bool ZEROFILL = true;
static const bool NO_ZEROFILL = false;
}
template <typename T>
class Derived : public Base<T>
{
public:
Derived( bool initZero = NO_ZEROFILL ); // NO_ZEROFILL is not visible
~Derived();
}
Я не могу скомпилировать это с GCC g++ 3.4.4 (cygwin).
До преобразования их в шаблоны классов они были неэквивалентными, а производный класс смог увидеть статические члены базового класса. Является ли эта потеря видимости требованием спецификации С++ или есть синтаксическое изменение, которое мне нужно использовать?
Я понимаю, что каждый экземпляр Base<T>
будет иметь свой собственный статический член "ZEROFILL
" и "NO_ZEROFILL
", что Base<float>::ZEROFILL
и Base<double>::ZEROFILL
являются разными переменными, но мне все равно; постоянная есть для удобочитаемости кода. Я хотел использовать статическую константу, потому что это более безопасно с точки зрения конфликтов имен, а не с макросом или глобальным.