Я столкнулся с некоторой странностью, когда кажется, что шаблонный класс может расширять частный вложенный класс.
Имеется следующий закрытый вложенный класс:
class A {
private:
class B {
protected:
void doSomething() {
...
}
};
};
Следующее не компилируется, как ожидалось:
class C : public A::B {
public:
C() {
this->doSomething();
}
};
Однако, gcc, похоже, с радостью принимает следующее, которое компилируется без смехов и фактически вызывает метод:
template<typename T>
class C : public A::B {
public:
C() {
this->doSomething();
}
};
Кто-нибудь знает, является ли это ожидаемым поведением при использовании шаблонов или я обнаружил странность в gcc. Я нахожусь на версии 4.4.5 (Ubuntu / Linaro 4.4.4-14ubuntu5), поэтому я понимаю, что немного устарел. Если это ожидаемое поведение, я был бы очень признателен за объяснение (или указатель на объяснение), поскольку это не то, чего я ожидал, и я хотел бы узнать о нем больше.
Большое спасибо,
Matt