Por que tenho que acessar os membros da classe base do modelo por meio desse ponteiro?

Se as classes abaixo não fossem modelos, eu poderia simplesmente terx noderived classe. No entanto, com o código abaixo, eutem que usarthis->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;
}

questionAnswers(3)

yourAnswerToTheQuestion