【发布时间】:2021-01-04 09:53:24
【问题描述】:
为什么此代码无效?
auto f() {
if (true) return 0;
return {};
}
解析0后,我想gcc应该知道函数f的返回类型是int,但是在解析最终的return子句时还是把{}解释为initializer_list,为什么?
【问题讨论】:
-
即使该代码是有效的,它肯定会让人类读者感到困惑。如果你生成这样的 C++ 代码,你可以改进生成器。最后GCC 是free software。你可以改进它
-
大括号括起来的列表没有类型,在推断的上下文中它们总是
std::initializer_lists。仅仅因为某些东西可以工作并不意味着它已经被实施或者它是一个好主意。这对我来说似乎毫无用处。 -
@BasileStarynkevitch:有几个令人困惑的有效/合法代码。这不是 gcc 的错误,所以这里没有什么可以改变的。这个问题是有效的(即使“标准的哪个部分禁止这样的构造?”和“为什么标准禁止这样的构造?”之间几乎没有歧义)。
标签: c++ return c++20 initializer-list type-deduction