c++ - 'static void' 作为 decl-specifier

标签 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 有这样一个这样的测试 (#1) 和 clang (v3.4) 失败了。

不过,如果我从 #1 中删除静态,则 clang 会按预期报告错误。

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

2 The declaration of a static data member in its class definition is not a definition and may be of an incomplete type other than cv-qualified void. ...

据我了解,此行将 #2 和 #3 视为无效但不确定 #1。是否有更多与静态存储类声明相关的细节应该排除#1?

谢谢,

最佳答案

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

In this International Standard, the notation cv (or cv1, cv2, etc.), used in the description of types, represents an arbitrary set of cv-qualifiers, i.e., one of {const}, {volatile}, {const, volatile}, or the empty set.

关于c++ - 'static void' 作为 decl-specifier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17432891/

相关文章:

c++ - 如何解锁 boost::upgrade_to_unique_lock(由 boost::shared_mutex 制成)?

C++ vector 中的元素相乘

获取完整函数路径和声明的 C++ 宏

c++ - 如果函数在匿名命名空间中声明,是否可以在全局命名空间中定义?

c++ - 懒惰评估是否有效/可优化?

c++ - 在编译时用基于模板的长度初始化一个 const 数组

c++ - 访问位集中的多个位

c++ - 如何在不指定信号量资源计数的情况下创建 ReadWriteMutex?

c++ - 如何在编译时创建数组?

c++ - 为什么 clang++ 会对内联的 enable_if 发出警告,然后无法链接?