以下代码是否合法?:
struct
{
int x;
};
这段代码仅仅定义了一个没有名字的结构体。我不打算创建该类型的对象,也不需要以其他方式使用此结构。它只是作为某些复杂宏扩展的副作用出现在源代码中。
虽然这个结构体毫无用处,但我认为没有问题。它只是另一段可以编译并完全优化掉的代码而已。
然而,在现实世界中,结果与我的期望相当不同:
GCC 8.3报告了一个错误:
error: abstract declarator '<unnamed struct>' used as declaration
Clang 8.0.0也报告了一个错误:
error: anonymous structs and classes must be class members
warning: declaration does not declare anything [-Wmissing-declarations]
只有MSVC 2017对这样的源代码没有任何问题。
那么问题来了:谁是对的?标准中是否有明确禁止这种声明的相关引用?
编辑:
该项目使用C++11。但是,C++98、C++11和C++17的错误消息都是相同的。