不完整类型的静态字段 - 合法吗?

16 c++ static incomplete-type

声明在C++中类定义合法的时刻类型的静态字段是不完整的?例如:

foo.h中:

class Foo
{
public:
  // ...
private:
  class Bar;
  static Bar something;
};
Run Code Online (Sandbox Code Playgroud)

Foo.cpp中:

class Foo::Bar
{
  // ...
};

Foo::Bar Foo::something;

// some more code
Run Code Online (Sandbox Code Playgroud)

编译器似乎接受了它,我没有看到它应该被拒绝的原因,但标准对这种情况有何看法?我真的很感谢有人直接引用标准,最好来自"旧"标准(2003年的标准).

Jer*_*fin 14

是的,你正在做的是特别允许的(§9.4.2/ 2):"静态数据成员在其类定义中的声明不是定义,可能是除了cv-qualified void之外的不完整类型."