在这里,我测试检查由“typename D”定义的var,是不合格的 依赖名称。答案是肯定的。因为如果我写两次定义:
template<typename D>
class A {
D d_field;
D d_field;
void func() { d_field = 1000; }
}
int main()
{
return 0;
}
如果我给出一个类型“double *”来使用这个模板。发生模板实例化,在func2中报告错误,“int无法转换为double *”。
template<typename D>
class A {
D d_field;
void func() { d_field = 1000; }
}
int main()
{
A<double*> a;
a.func();
return 0;
}
另外,我改变如下,g ++将编译好。证明gcc工作在基于c ++标准的两阶段查找...如果名称是合格的依赖名称,它只会被检查在模板实例化中。
template<typename D>
class A {
D:: d_field;
D:: d_field;
void func() { d_field = 1000; }
}
int main()
{
return 0;
}
是吗?
答案 0 :(得分:2)
没有。变量的名称是本地声明的名称,因此它既不依赖也不依赖。只有编译器必须在模板外查找的名称才能依赖或不依赖。