C++标准歧义

Hec*_*tor 8 c++ language-lawyer

就我在标准中看到的而言,以下代码是有效的.它在MSVC1025中编译.

const struct omg;
struct omg volatile;

int main()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

预选赛constvolatile似乎在这些声明漫无目的.他们既不帮助也不伤害编译器和程序员.

该标准似乎并未倾向于消除这些"空洞的模糊".在空声明的情况下,;明确允许.

在预处理之后,还有其他令牌的情况与表达的含义无关吗?

Sha*_*our 4

clanggcc都使用 拒绝此代码-pedantic-errors。clang 提供以下错误:

error: 'const' is not permitted on a declaration of a type [-Werror,-Wmissing-declarations]
const struct omg;
^

error: 'volatile' is not permitted on a declaration of a type [-Werror,-Wmissing-declarations]
Run Code Online (Sandbox Code Playgroud)

C++ 标准草案第 7.1.6.1 节 cv 限定符 [dcl.type.cv] 说:

[...]如果 cv 限定符出现在 decl-specifier-seq 中,则声明的 init-declarator-list 不得为空。[...]