以下のコードの 「struct ::n::s」の部分は文法的に間違いなのでしょうか?
vc6,g++(cygwin)でコンパイルも実行も出来たのですが。

namespace n {
struct s;
}
struct ::n::s {int x;};
int main() {
::n::s v;
v.x = 1;
return 0;
}

The C++ Programming Language(3rd)の巻末のgrammarのクラスの定義の部分は、

>class-head:
>  class-key identifier(opt base-clause(opt
>  class-key nested-name-specifier identifier base-clause(opt
>  class-key nested-name-specifier(opt "template" template-id base-clause(opt
>
>class-key:
>  "class"
>  "struct"
>  "union"
また、
>nested-name-specifier:
>  class-or-namespace-name "::" nested-name-specifier(opt
>  class-or-namespace-name "::" "template" nested-name-specifier
となっており、クラス名またはクラス名の前のネームスペース名には "::" を
付けられないというように読めるんです。

正誤表には載ってないので、コンパイラ独自拡張ですか?
http://www.research.att.com/~bs/3rd_errata.html