Quelle est la règle qui permet à `this->` d’accéder aux membres des classes de base dépendantes?

Comme nous le soaps, le code ci-dessous est mal formé car le membre x appartient à une classe de base dépendante. Cependant, changer x en this->x sur la ligne indiquée résoudrait l’erreur.

 template  struct B { int x; }; template  struct C : B { void f() { int y = x; // Error! } }; int main() { C c; cf(); } 

Je voudrais une explication de la façon dont ce comportement est spécifié dans la norme. Selon [temp.dep] / 3:

Dans la définition d’une classe ou d’un modèle de classe, si une classe de base dépend d’un paramètre-modèle, la scope de la classe de base n’est pas examinée lors de la recherche d’un nom non qualifié, ni au moment de la définition du modèle ou du membre de la classe, ni lors d’une instanciation du type. modèle de classe ou membre.

Cela semble expliquer pourquoi l’utilisation de x seul échoue. Le nom x est recherché au sharepoint définition et l’étendue de la classe de base n’est pas examinée. Cependant, si nous this->x ? Maintenant, le nom x est dépendant et sa recherche est rescope à l’instanciation. Mais le paragraphe cité semble impliquer que x ne devrait pas être trouvé même au moment de l’instanciation, car la recherche de x dans this->x est toujours une recherche non qualifiée .

Évidemment, les implémentations ne se comportent pas de cette façon, et il est généralement admis que la scope de la classe de base fait l’ object d’une recherche une fois le modèle instancié.

  1. Ai-je mal interprété le paragraphe cité?
  2. Existe-t-il un paragraphe spécifiant le comportement “correct”?

Les expressions d’access aux membres de la classe (5.2.5. [Expr.ref]) n’utilisent pas de règles de recherche non qualifiées, elles utilisent les règles de recherche d’access aux membres de la classe (3.4.5 [basic.lookup.classref]).

(2) Si l’ expression id dans l’access à un membre de la classe (5.2.5) est un identificateur non qualifié et que le type de l’expression d’object est d’un type de classe C , l’identificateur non qualifié est recherché dans l’étendue de la classe. C