在visual c ++中,接受下面的代码,g ++将生成错误: “类Derived没有任何字段名Base” 哪个符合标准?
template <class T>
class Base
{
public:
Base(){};
};
template <class T>
class Derived:public Base<T>
{
public:
Derived():Base(){}
};
BTW:都接受
Derived():Base<T>(){}
所以,我会跟着gcc
答案 0 :(得分:6)
MSVC ++不正确。 Base
是模板,而不是类型。
请注意,在通常情况下,在Base
的范围内查找Derived<T>
,这意味着它将首先找到从Base<T>
继承的注入类名,类型Base<T>
。但是,由于您具有从属基类,因此找不到从Base<T>
继承的名称(不会查看基类范围)。