次のコードを検討してください。
template <typename T>
struct X{
struct Y{
unsigned i;
};
template<typename E>
struct Z : public Y {
unsigned foo(){
return i;
}
};
};
XネストされたクラスYとを持つクラス テンプレートがありZます。Zもテンプレートであり、 から継承しYます。したがって、フィールドも継承しますi。ただし、このコードはコンパイルされません。iコンパイルでは、のfoo()方法では解決できないと書かれていますZ。i明示的に接頭辞を付けるとthis->、問題が解決します。
外側の type を削除するとX、プレフィックスは不要になり、コードはそのまま正常にコンパイルされます。
ここでこの明示的なthis->プレフィックスが必要なのはなぜですか?