我的问题是,下面的代码为什么无法编译:
template<typename t> class c1
{
public:
typedef int type_name;
void fn1(type_name x) {}
};
template<typename t> class c2 : public c1<t>
{
public:
void fn2(type_name x) {}
};
以下内容可以实现:
class c1
{
public:
typedef int type_name;
void fn1(type_name x) {}
};
class c2 : public c1
{
public:
void fn2(type_name x) {}
};
如您所见,唯一的区别在于第一个案例中的类是模板。Gcc和Clang抱怨在第二个类中未定义type_name(仅在模板版本中定义)。typedef是否不会从父类继承?如果是这样,为什么非模板版本可以工作?在使用来自模板的typedef时是否存在某些异常情况?
此外,我知道我可以通过完全限定的类型名称使其正常工作,即'typename c1 :: type_name'。我只想知道这是一些C++限制还是编译器错误。