Объявляет статическое поле типа, которое является неполным в момент определения класса, законного в С++? Например:
foo.h:
class Foo
{
public:
// ...
private:
class Bar;
static Bar something;
};
foo.cpp:
class Foo::Bar
{
// ...
};
Foo::Bar Foo::something;
// some more code
Компиляторы, похоже, согласны с этим, и я не вижу причин, по которым его следует отклонить, но что говорит стандарт о такой ситуации? Я бы очень хотел, чтобы кто-то дал прямую цитату из стандарта, предпочтительно из "старой" (той, которая была с 2003 года).