Tôi đang cố gắng sử dụng các biến thành viên của một lớp cơ sở templated trong một lớp học có nguồn gốc, như trong ví dụ này:biến thành viên Sử dụng kế thừa từ một lớp cơ sở templated (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 và kêu vang đều rất cầu kỳ về việc sử dụng biến này và yêu cầu một phạm vi rõ ràng hoặc sử dụng rõ ràng "điều này". Với một số trình biên dịch khác (xlc và icc), mọi thứ hoạt động như tôi mong đợi. Đây có phải là trường hợp xlc và icc cho phép mã không phải là tiêu chuẩn hay một lỗi trong gcc và clang không?
Câu hỏi tương tự: http://stackoverflow.com/questions/11405/gcc-problem-using-a-member-of-a-base-class-that-depends-on-a-template-argument –