函数类型的 sizeof; gcc 不认为它格式错误

sizeof over a function type; gcc doesn't recognized it as ill-formed

做这个小测试 (http://coliru.stacked-crooked.com/a/71096660a727f4b0):

#include <iostream>

int main()
{
   std::cout << sizeof(void()) << '\n';
}

gcc 产生警告而不是错误(并打印 1)。难道不应该像 clang 那样将其视为格式错误的表达式吗?

该标准不区分警告和错误。因此,格式错误的构造只能发出警告。编译也应该失败不是必需的。唯一的要求是应该发布诊断。未指定诊断的确切含义。

(以及相关说明:有一些结构不正确,但标准根本不需要诊断)