Какое правило позволяет `this->` обращаться к членам зависимых базовых классов?

Как мы знаем, приведенный ниже код некорректен, потому что членx находится в зависимом базовом классе. Тем не менее, изменениеx вthis->x в указанной строке исправит ошибку.

template <typename T>
struct B {
    int x;
};
template <typename T>
struct C : B<T> {
    void f() {
        int y = x; // Error!
    }
};
int main() {
    C<int> c;
    c.f();
}

Я хотел бы объяснить, как это поведение указано в стандарте. Согласно [temp.dep] / 3:

В определении класса или шаблона класса, если базовый класс зависит отШаблон-параметр, область действия базового класса не проверяется при поиске безоговорочного имени ни в точке определения шаблона или члена класса, ни во время создания шаблона или члена класса.

Это, кажется, объясняет, почему с помощьюx один не удается. Имяx ищется в точке определения, а область действия базового класса не рассматривается. Однако, что если мы используемthis->x? Теперь имяx зависит, и его поиск откладывается до момента его создания. Но процитированный параграф, кажется, подразумевает, чтоx не должен быть найдендаже во время создания экземпляра, с момента поискаx вthis->x являетсяеще неквалифицированный уважать.

Очевидно, реализации не ведут себя таким образом, и общепризнанно, что область действия базового классаявляется искали, как только шаблон создан.

Я неправильно истолковал цитируемый абзац?Есть ли абзац, в котором указано «правильное» поведение?

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

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