C ++标准歧义

时间:2015-10-21 15:43:06

标签: c++ language-lawyer

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

const struct omg;
struct omg volatile;

int main()
{
    return 0;
}

限定词constvolatile在这些声明中似乎没用。他们既不帮助也不伤害编译器和程序员。

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

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

1 个答案:

答案 0 :(得分: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]

草案C ++标准第7.1.6.1节cv-qualifiers [dcl.type.cv]说:

  

[...]如果cv-qualifier出现在decl-specifier-seq中,则声明的init-declarator-list应为   不是空的。[...]