在requires表达式中捕获局部参数

问题描述 投票:0回答:1

与函数类似的需求表达式可以使用参数列表引入局部参数。在块作用域定义的 lambda 表达式可能具有不带初始值设定项的捕获。是否允许捕获requires-expression的本地参数?

考虑这个例子:

template<typename T>
concept C = requires( T t ) { 
    [t]{ [t]{}; };
};

GCC 和 MSVC 都接受。只有 Clang 在这里抱怨(演示:https://gcc.godbolt.org/z/o17hWGabG):

错误:约束变量“t”不能在评估的上下文中使用

据我了解,

[t]{ [t]{}; };
是一个简单的要求,其中表达式是一个未评估的操作数;仅检查语言正确性。

编译器的预期行为是什么?

c++ lambda language-lawyer c++20 requires-expression
1个回答
0
投票

来自 expr.prim.req.general#2:

requires-expression 是 bool 类型的纯右值,其值如下所述。出现在需求主体中的表达式是未计算的操作数。

那么 Clang 的抱怨是错误的,不是吗?

© www.soinside.com 2019 - 2024. All rights reserved.