Próbuję użyć zmiennych członkiem matrycy klasy podstawowej w klasie pochodnej, jak w poniższym przykładzie:Korzystanie zmienne składowe dziedziczone z matrycy klasy bazowej (C++)
template <class dtype>
struct A {
int x;
};
template <class dtype>
struct B : public A<dtype> {
void test() {
int id1 = this->x; // always works
int id2 = A<dtype>::x; // always works
int id3 = B::x; // always works
int id4 = x; // fails in gcc & clang, works in icc and xlc
}
};
gcc i brzęk są zarówno bardzo wrażliwe na używanie tej zmiennej i wymagają albo wyraźnego zakresu, albo wyraźnego użycia "tego". W przypadku niektórych innych kompilatorów (xlc i icc) rzeczy działają tak, jak bym się spodziewał. Czy jest to przypadek xlc i icc zezwalający na kod, który nie jest standardem, czy błąd w gcc i clang?
Podobne pytanie: http://stackoverflow.com/questions/11405/gcc-problem-using-a-ember--base-class-that-depends-on-a-template-argument –