C++ 模板继承问题

C++ 模板继承问题,c++,inheritance,templates,C++,Inheritance,Templates,我正在试图理解我在这段代码中遇到的错误: (错误在g++unix编译器下。VS正在编译正常) 模板类别A{ 公众: T; 公众: A(常数T&t1):T(t1){} virtual void Print()const{cout您还可以使用this->t访问基类模板成员 在B::get()中,名称t不依赖于模板参数t,因此它不是一个依赖名称。基类a显然依赖于模板参数t,因此是一个依赖基类。非依赖名称不会在依赖基类中查找。常见问题解答在区域上是错误的关于为什么“this->”有效。将其与标准(我强调

我正在试图理解我在这段代码中遇到的错误: (错误在g++unix编译器下。VS正在编译正常)

模板类别A{
公众:
T;
公众:
A(常数T&t1):T(t1){}

virtual void Print()const{cout您还可以使用
this->t
访问基类模板成员


B::get()中
,名称
t
不依赖于模板参数
t
,因此它不是一个依赖名称。基类
a
显然依赖于模板参数
t
,因此是一个依赖基类。非依赖名称不会在依赖基类中查找。

常见问题解答在区域上是错误的关于为什么“this->”有效。将其与标准(我强调)进行比较。常见问题解答:“由于这在模板中始终是隐式依赖的,因此->f是依赖的,因此查找延迟到模板实际实例化,此时所有基类都被视为”,标准:“…在类模板或成员的定义点或类模板或成员的实例化过程中,未在非限定名称查找期间检查基类作用域。”。常见问题解答说,找到基类作用域是因为它是依赖的,但这是错误的。GCC也实现了错误的解释,因此
template<class T> class A {
public:
    T t;
public:
    A(const T& t1) : t(t1) {}
    virtual void Print() const { cout<<*this<<endl;}
    friend ostream& operator<<(ostream& out, const A<T>& a) {
            out<<"I'm "<<typeid(a).name()<<endl;
            out<<"I hold "<<typeid(a.t).name()<<endl;
            out<<"The inner value is: "<<a.t<<endl;
            return out;
    }
};

template<class T> class B : public A<T> {
public:
    B(const T& t1) : A<T>(t1) {}
    const T& get() const { return t; }
};

int main() {
    A<int> a(9);
    a.Print();
    B<A<int> > b(a); 
    b.Print();
    (b.get()).Print();  
    return 0;
}
template<class T> class B : public A<T> {
public:
    B(const T& t1) : A<T>(t1) {}
    const T& get() const { return A<T>::t; }
};