【发布时间】:2018-09-12 22:41:45
【问题描述】:
看看这个sn-p:
int a;
extern int b;
auto b = a;
格式是否正确? Clang 可以成功编译,但是 GCC 和 MSVC 没有。
(我回复How to declare and define a static member with deduced type?时就出现了这个问题)
【问题讨论】:
-
我相信
[dcl.spec.auto]p5是这里的关键措辞,感觉措辞应该明确涵盖这种情况,但事实并非如此,因此它最终格式不正确。 -
@ShafikYaghmour:如果我从逻辑上思考,
b被声明为int。然后,它被定义为int(因为auto被推导出为int)。所以它应该是格式良好的。如果标准希望 this 格式不正确,则标准应该另有说明,就像它对函数这样做一样。 -
当然,从逻辑上讲,但标准措辞另有说明……也许这是一个缺陷……还不确定。我正在与其他语言律师联系以查看,但我认为我的分析是正确的。
-
如果格式不正确,那么这意味着用
auto定义全局变量将是格式不正确的,除非您采取特殊措施确保 extern 声明在包含在与它声明的全局定义相同的翻译单元。这对我来说似乎有点荒谬。 -
@Galik 我在 Twitter 上收到了 Richard Smith 的回复,他似乎同意 clang 是正确的。
标签: c++ language-lawyer auto variable-declaration