【发布时间】:2014-04-09 13:00:44
【问题描述】:
如果我们查看draft C++ standard 部分5.1.2 Lambda 表达式 段落2 说(强调我的前进): p>
对 lambda 表达式的求值会产生一个临时纯右值 (12.2)。这个临时对象称为闭包对象。 lambda 表达式不得出现在未计算的操作数中(第 5 条)。 [注意:闭包对象的行为类似于函数对象(20.8)。—结束注释]
和5.19部分常量表达式第2段说:
条件表达式是核心常量表达式,除非它涉及以下之一作为潜在评估的子表达式 (3.2),但是逻辑与 (5.14) 的子表达式,逻辑或 ( 5.15) 和未评估的条件 (5.16) 操作不被考虑 [...]
并有以下项目符号:
——一个 lambda 表达式 (5.1.2);
那么为什么 lambdas 表达式不允许在未计算的操作数中,但允许在常量表达式的未计算部分?
我可以看到在几种情况下(decltype 或typeid)对于未评估的操作数,类型信息不是很有用,因为每个 lambda 都有一个唯一的类型。虽然我们为什么要在常量表达式的未评估上下文中允许它们尚不清楚,但也许是为了允许SFINAE?
【问题讨论】:
标签: c++ c++11 lambda c++14 constant-expression