¿Por qué tengo que acceder a los miembros de la clase base de la plantilla a través del puntero this?

Si las siguientes clases no fueran plantillas, simplemente podría tenerx en elderived clase. Sin embargo, con el siguiente código, yoTiene que utilizarthis->x. ¿Por qué?

template <typename T>
class base {

protected:
    int x;
};

template <typename T>
class derived : public base<T> {

public:
    int f() { return this->x; }
};

int main() {
    derived<int> d;
    d.f();
    return 0;
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta