c++标准歧义

C++ standard ambiguity

本文关键字:歧义 标准 c++      更新时间:2023-10-16

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

const struct omg;
struct omg volatile;
int main()
{
    return 0;
}

限定符constvolatile在这些声明中似乎没有目的。它们既不会帮助也不会伤害编译器和程序员。

标准似乎并不打算清除这些"空洞的歧义"。在空声明;的情况下,它是明确允许的。

在预处理之后,是否存在其他与表达式意义无关的标记?

clang和gcc都使用-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.]简历]说:

[…如果在decl- specific -seq中出现cv-qualifier,则该声明的init-declarator-list应为[…]