'static void'作为decl-specifier

时间:2013-07-02 18:15:51

标签: c++ c++11 clang clang++

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

class A {
  static void x; // #1
  static const void x; // #2
  static volatile void x; // #3
};

在我看来,没有一个声明是有效的。 perenial C++ standard validation suite {{3}} 有这样一个测试(#1)和clang(v3.4)失败了。

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

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

  

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

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

谢谢,

1 个答案:

答案 0 :(得分:5)

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

  

在本国际标准中,在类型说明中使用的符号cv(或cv1cv2等)代表   任意一组cv限定符,即{const},{volatile},{constvolatile},或空集之一。