"静态空隙"作为描述符

'static void' as decl-specifier

本文关键字:描述 静态      更新时间:2023-10-16

下面的代码用clang编译得很好。我想知道C++标准是否适用于此。

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

在我看来,没有一项声明是有效的。一年一次的C++标准验证套件有这样一个测试(#1),而clang(v3.4)在这方面失败了。

不过,如果我从#1中删除static,那么clang会像预期的那样报告错误。

我查看了标准,发现了一段关于静态数据成员的内容(9.4.2-2),其中写道:

2静态数据成员在其类定义中的声明不是定义,可能是一种不完整的类型,而不是cv合格的无效。。。

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

谢谢,

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

在本国际标准中,用于描述类型的符号cv(或cv1cv2等)表示cv限定符的任意集合,即{const}、{volatile}、{constvolatile}、中的一个或空集