Почему GCC позволяет наследовать от частного вложенного класса?

Рассмотрим следующий код:

class A {
class B {};
};

template <typename C>
class D : A::B {};

void f() {
D<int> d;
}

D<int> наследуется от A::B который является частным вложенным классом. Я ожидал, что это будет ошибкой, но GCC принимает этот код. Это ошибка в GCC или я что-то упустил?

10

Решение

Я нашел ответ. Так как это может быть полезно для других, я публикую это здесь — это ошибка GCC 47346.

7

Другие решения

Вы пытались создать не шаблонный производный класс?

Шаблонный класс не компилируется, если нет объекта этого класса. Попробуйте создать экземпляр этого класса или создать не производный от шаблона класс — gcc, вероятно, потерпит неудачу 😉

редактировать
Мое плохое — объект создан, и он не вызывает ошибку gcc. Простите за это.

2

По вопросам рекламы [email protected]