Рассмотрим следующий код:
class A {
class B {};
};
template <typename C>
class D : A::B {};
void f() {
D<int> d;
}
D<int>
наследуется от A::B
который является частным вложенным классом. Я ожидал, что это будет ошибкой, но GCC принимает этот код. Это ошибка в GCC или я что-то упустил?
Я нашел ответ. Так как это может быть полезно для других, я публикую это здесь — это ошибка GCC 47346.
Вы пытались создать не шаблонный производный класс?
Шаблонный класс не компилируется, если нет объекта этого класса. Попробуйте создать экземпляр этого класса или создать не производный от шаблона класс — gcc, вероятно, потерпит неудачу 😉
редактировать
Мое плохое — объект создан, и он не вызывает ошибку gcc. Простите за это.