为什么gcc解析第一个return子句后不能推导出返回值类型?

问题描述

为什么此代码无效?

auto f() {
  if (true) return 0;
  return {};
}

解析0后,我认为gcc应该知道函数f的返回类型是int,但它仍然将{}解释为{{1} } 解析最后的return子句时,为什么?

解决方法

来自function#Return_type_deduction

如果有多个return语句,它们必须都推导出同一个类型

如果 return 语句使用了大括号初始化列表,则不允许推导:

禁止这种构造。

一旦在函数中看到 return 语句,从该语句推导出的返回类型就可以用于函数的其余部分,包括其他 return 语句。

只允许递归地重用函数。