Qubc
@Qubc
Ненавижу полисемию.

Почему внутри шаблона можно иметь доступ к приватному члену внутреннего класса?

class Inner {
private:
    int data;
};

class Outer1 {
    Inner i;
    void f () {
        //i.data;//  :-) 'int Outer::Inner::data' is private within this context
    }
};

template <typename T>
class Outer2 {
    Inner i;
    void f () {
        i.data;// ??? :-( Почему внутри шаблона можно иметь доступ к приватному члену внутреннего класса? 
    }
};

int main ( void ) {
    Outer1 o1;
    Outer2 <int> o2;
    return 0;
}
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
С чего вы взяли, что внутри шаблона это работет? Вы его инстанциировать пробовали (объявить переменную класса Outer<int>, например)?

Вылезает точно такая же ошибка.

Если шаблон просто написать, но не использовать его, то он компилироваться и не будет и ошибки в нем не обнаружатся.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы