【发布时间】:2021-11-25 07:01:07
【问题描述】:
gcc 8 和 clang 7 不接受以下代码,它们应该默认构造一个 unsigned int 类型的临时代码:
unsigned int ui = unsigned int{};
clang 7报错如
<source>:6:22: error: expected primary-expression before 'unsigned'
Visual C++ 2015 和 2017 接受这一点。
显然,这适用于 int 等类型或任何默认可构造的类类型。
这是正确的 C++14 代码吗(在这种情况下是 clang 和 gcc 的错误)?如果不是,为什么不呢?除了无符号类型,还有哪些类型会受到同样的限制?
【问题讨论】:
-
试试
(unsigned int){};。想想 {} 仅应用于int,然后有unsigned挂在不应该出现的位置,因此出现错误消息。 -
@DeiDei 是标准 C++ 中的语法错误(括号中的 typename 后跟
{不匹配任何语法规则)
标签: c++ initialization c++14 language-lawyer