从模板继承时所需的限定访问

Qualified access needed when inheriting from template

本文关键字:访问 继承      更新时间:2023-10-16

在这种情况下,为什么我不能在B1的情况下访问不合格的基类成员x ?我看不出有歧义…

template<class T>
struct A { T x; };
template<class T>
struct B1 : A<T> { T f() { return A<T>::x; } };
struct B2 : A<int> { int f() { return x; } };

由于x不依赖,因此将在定义模板的上下文。在这种情况下,编译器对T一无所知,无法查找依赖基类。例如,如果不知道T是什么,它怎么可能知道A<T>。(例如,A可能有一个专门化,具有完全不同的成员。)