当我阅读 C++11 标准的 page93 $5.1.2 时,它说在这种情况下使用支撑初始化列表是非法的:auto x=[]{return {1,2}} ; //错误:花括号初始化列表不是表达式
我找到了这两个主题,一个来自标准,另一个来自 N3681 提案。
第 397 页 $14.8.2.5:初始化列表参数导致参数被视为非推导上下文。和 $7.6.1.4:用新发明的类型模板参数 U 替换出现的 auto,或者,如果初始化程序是花括号初始化列表 (8.5.4),则用 std::initializer_list 替换。
虽然 N3691 提案建议“将大括号初始化的 auto 更改为不推断为初始化列表,并在大括号初始化器具有多个元素的情况下禁止大括号初始化 auto。”它说“返回一个大括号-列表不起作用,因为它不是表达式” http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3681.html
但是我没找到“Why is abraced-init-list not an expression?”可能和这个题目意思一样: 为什么我们不能自动推导出返回类型? 但是当他试图理解为什么 C++ 委员会认为这种语法毫无价值时,有一点不同。所以这一定有什么特别的原因吗?非常感谢。