【发布时间】:2019-05-07 16:31:35
【问题描述】:
给定代码
int main()
{
constexpr int n;
return 0;
}
,g++,带有-fpermissive,只发出警告,而clang++,同样带有-fpermissive,出错,抱怨const类型'const int'的对象的默认初始化。现在,我相信 clang++ 的行为是正确的。问题是我是否遗漏了什么,也许 g++ 不发出错误是可以接受的。版本:clang++ 7.0.1、g++ 8.3.1、Fedora 29、amd64。
【问题讨论】:
-
警告是一种诊断(标准所要求的全部)。因此两个编译器都是正确的。
-
-fpermissive通常会将错误转化为警告。这个问题似乎适得其反。 -
我明白你在说什么,但是由于
clang++发出错误,即使使用-fpermissive,我认为一个编译器在这方面比另一个更宽松。如果我正确阅读标准,那应该是一个错误。 -
使用
-fpermissive,您明确地告诉编译器您希望快速轻松地使用标准规则。当你明确告诉它“嘿,相信我;不要遵守规则”时,你不能指望编译器遵守规则