以下代码使用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?
谢谢,
答案 0 :(得分:5)
不,这是不允许的,正是因为你引用的段落。请注意,您引用的段落中的“cv-qualified”一词包括不合格。根据C ++ 11标准的第3.9.3 / 10段:
在本国际标准中,在类型说明中使用的符号
cv
(或cv1
,cv2
等)代表 任意一组cv限定符,即{const
},{volatile
},{const
,volatile
},或空集之一。 强>