我不知道该如何解释为什么在类模板OuterTempl<T>
中创建成员变量inner
是合法的,而在非模板类Outer
中却是非法的。
// Non-template version
struct Outer
{
struct Inner;
Inner inner; // incomplete type (I get this)
};
struct Outer::Inner
{
};
// Template version
template<typename T>
struct OuterTempl
{
struct InnerTempl;
InnerTempl inner; // OK ... Huh!?
};
template<typename T>
struct OuterTempl<T>::InnerTempl
{
};
int main()
{
}
另请参阅ideone。