如果包含多个语句,是否有理由不允许lambda推断返回类型?

Xeo*_*Xeo 6 c++ lambda return-type c++11

取自C++ 0x FDIS(n3290):

如果lambda表达式不包含lambda声明符,那就好像lambda声明符是().如果lambda表达式不包含trailing-return-type,则就好像trailing-return-type表示以下类型:

  • 如果compound-statement的格式为
    {attribute-specifier-seq opt return expression; }
    返回的表达的左值到右值转换(4.1),阵列到指针转换(4.2),和功能到指针转换(4.3)后的类型;
  • 否则,无效.

为什么标准不允许编译器分析复合语句并根据第一个找到的return语句确定返回类型?

我看不出任何理由不允许这样,但也许我忽视了一些事情.

例:

int main(){
  // compiler: nope.jpg
  auto l = []{
    // one computation
    // another computation
    // yet another one!
    return something;
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑:请不要"因为标准是这么说的"答案.:)

Joh*_*itb 10

这没有技术上的原因.IIRC它已经由GCC C++维护者实现,他说实现它是微不足道的.

委员会非常保守地接受标准中的功能,因此他们采用这种简单的演绎形式,并且后来希望接受更强大的形式.查看拒绝美国30评论的原因.

DR 975已经标记为"准备好",因此很有可能会被接受.