与函数类似的需求表达式可以使用参数列表引入局部参数。在块作用域定义的 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]{}; };
是一个简单的要求,其中表达式是一个未评估的操作数;仅检查语言正确性。
编译器的预期行为是什么?
requires-expression 是 bool 类型的纯右值,其值如下所述。出现在需求主体中的表达式是未计算的操作数。
那么 Clang 的抱怨是错误的,不是吗?