'static void'作为decl-specifier

A. *_* K. 5 c++ clang c++11 clang++

以下代码用clang编译好.我想知道C++标准是否适合这个.

class A {
  static void x; // #1
  static const void x; // #2
  static volatile void x; // #3
};
Run Code Online (Sandbox Code Playgroud)

在我看来,没有一个声明是有效的.所述perenial C++标准验证套件 具有这样一个这样的试验(#1)和铛(V3.4)失败在于.

虽然,如果我从#1中删除静态,那么clang会按预期报告错误.

我查看了标准,并在静态数据成员(9.4.2-2)中找到了一个段落,其中说:

2在类定义中声明静态数据成员不是一个定义,除了cv-quali fi ed void之外可能是不完整的类型....

据我所知,这一行取消了#2和#3的无效,但对#1不确定.是否有更多与静态存储类声明相关的细节应该排除#1?

谢谢,

And*_*owl 5

不,这是不允许的,正是因为你引用的段落.请注意,您引用的段落中的"cv-qualified"一词包括不合格.根据C++ 11标准的第3.9.3/10段:

在该标准中,符号cv(或cv1,cv2等),在类型的描述中使用,表示任意的集合CV-限定符,即之一{ const},{ volatile},{ const,volatile},或空集.