template<typename T>
struct A
{
using U = int;
};
struct B : A<int>
{
void f(U) // ok
{}
};
template<typename T>
struct C : A<int>
{
void f(U) // ok
{}
};
template<typename T>
struct D : A<T>
{
void f(U) // fatal error: unknown type name 'U'
{}
};
int main()
{
B b; // ok
C<int> c; // ok
D<int> d; // error
}
为什么类不能继承其父类的成员类型?
由于作为一个非依赖名称,不会在依赖基类U
中查找A<T>
,该依赖基类取决于模板参数T
。另一方面,对于B
和C
,它们的基类都是非依赖基类。