【发布时间】:2012-02-24 19:02:34
【问题描述】:
我最近惊讶地发现这段代码可以编译(至少在 gcc 和 MSVC++ 上):
template<typename T>
class A {
public:
T getT() { return T(); }
};
class B : public A<B> { };
如果不是这样:
class A;
class B : public A { };
class A {
public:
B getB() { return B(); }
};
在我看来,一个模板类可以将一个不完整的类型作为模板参数并具有一个通过调用其构造函数返回一个并且仍然编译的函数,这对我来说似乎很奇怪。那么究竟哪里需要完整的类型(或者如果列表会更短,哪些地方不需要)?
【问题讨论】:
-
如果您不将模板视为代码,而是将其视为代码生成工具,这可能会有所帮助,并且只有实际代码才需要具有语义意义.
-
@KerrekSB 是的,但我不清楚何时 代码生成工具 实际生成了它的代码。不过我现在很清楚了。
标签: c++ incomplete-type