在类声明中包含杂散分号是否可移植

问题描述 投票:0回答:1
class Test
{
  ;
  int x;
};

这完全合法且可移植吗?

c++ class syntax language-lawyer grammar
1个回答
6
投票

从我对标准的阅读来看,这是不允许的。

如果只看语法定义,似乎是允许的。相关部分是:

成员规范出现在类声明中

{ ... }
之间。

成员规范是一系列成员声明和访问说明符。 成员声明的一种可能形式是:

属性说明符序列opt decl-说明符序列opt 成员声明符列表opt;

由于分号之前的所有内容都是可选的,因此看起来允许有一个空 成员声明,仅由分号组成。

但是,9.2/1 说:

除非用于声明友元 (11.3) 或将基类成员的名称引入派生类 (7.3.3),成员声明声明类的成员,并且 每个此类成员声明都应声明至少有一个班级成员姓名

由于空成员声明未声明类的至少一个成员,因此即使某些编译器接受它,这似乎也不符合标准。

© www.soinside.com 2019 - 2024. All rights reserved.