以下代码合法吗?:
struct
{
int x;
};
这段代码只是定义了一个未命名的结构。我不打算创建这种类型的对象,也不需要以任何其他方式使用这种结构。它只是作为某些复杂宏扩展的副作用出现在源代码中。
尽管它没用,但我认为它没有问题。只是另一段可以编译然后完全优化的代码。
然而,在现实世界中,结果与我的预期完全不同:
GCC 8.3 报错:
错误:抽象声明器“<未命名的结构>”用作声明
Clang 8.0.0 也报错:
错误:匿名结构和类必须是类成员
警告:声明没有声明任何东西[-Wmissing-declarations]
只有 MSVC 2017 认为此类来源没有问题。
所以,问题是:谁是对的?标准中是否有明确禁止此类声明的相关引用?
编辑:
该项目使用 C++11。但 C++98、C++11 和 C++17 的错误消息是相同的。