考虑以下两个简单的概念:
template <typename T>
concept C1 = requires(T t) {
[t = t]{ t; };
};
template <typename T>
concept C2 = requires(T t) {
[t]{ t; };
};
我认为这两个声明应该等效,但GCC拒绝了concept C2
并说:<source>:10:9: error: use of parameter outside function body before ';' token
Why GCC only accepts the concept C1
,或者这仅仅是一个错误?如果不是,那么这两个声明有什么区别? 最佳答案
简单捕获(如第二个示例中的[t]
)只能捕获局部变量和/或this
。但是,require-expression的参数不是局部变量。初始化捕获不是一个问题(如您的第一个示例)。