¹ или что GCC неверен - мы должны действительно проверить стандарт для этого.

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

#include <iostream>

using std::endl;
using std::cout;

template<typename T>
class B{
protected:
    T value;
    B* ptr;
public:
    B(T t):value(t), ptr(0){}
};

template<typename T>
class D: public B<T>{
public:
    void f();
    D(T t):B<T>(t){}
};

template<typename T>
void D<T>::f(){
    cout << this->value << endl;     //OK!
    this->ptr = this;
    cout << this->ptr->value << endl;      //error! cannot access protected member!!
    B<T>* a = this;
    cout << a->value <<endl;       //error! cannot access protected member!!
}


int main(){
    D<double> a(1.2);
    a.f();
    return 0;
}

Кажется, что к члену базового класса можно напрямую получить доступ, используяthis указатель, но не другие указатели.
Считает ли компилятор их различными экземплярами?

Ответы на вопрос(2)

Ваш ответ на вопрос