为何lambda表达式parameter-declaration-clause中名称查找无法找到init-captures?
Lambda捕获在参数声明中的名称查找疑问
请看以下示例代码:
int main() { const char* x; [x = 1] (decltype(-x) y) {}; }
测试多款编译器均拒绝编译该代码,原因是无法对指针应用一元负号运算符。
我无法理解为何标准要求这种行为。根据标准[expr.prim.lambda.capture]/6条款:
init-capture属于lambda表达式的lambda scope(见[basic.scope.lambda])。[...]
lambda scope在[basic.scope.lambda]中定义:
lambda表达式
E引入一个lambda scope,该作用域始于E的lambda-introducer之后,延伸至E的compound-statement末尾。
lambda-introducer是方括号包裹的部分,因此似乎在[x = 1]的闭合方括号之后,对x的名称查找应找到init-capture,而非外围块作用域中声明的变量x。
但编译器显示,仍处于parameter-declaration-clause中时,对x的名称查找无法找到init-capture。我确信编译器是正确的,我的推理存在错误,但问题出在哪里呢?
内容的提问来源于stack exchange,提问作者Brian Bi
相关产品推荐
相关产品推荐

