考虑以下两个简单的概念:

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的参数不是局部变量。初始化捕获不是一个问题(如您的第一个示例)。

10-08 01:55