这个指针是如何被捕获的?

MWi*_*Wid 6 c++ lambda this c++11

请考虑以下代码:

struct S
{
  int x;
  void f()
  {
    auto l = [&](){ x = 42; }; //this is implicitly captured here
  }
};
Run Code Online (Sandbox Code Playgroud)

§5.1.2/ 14指出:

如果隐式捕获实体并且捕获默认值为=,或者使用不包含&的捕获显式捕获实体,则通过副本捕获实体.

因此,我得出结论,这this不是由副本捕获的.但是后来§5.1.2/ 15:

如果实体是隐式或显式捕获但未通过复制捕获,则通过引用捕获实体.未指定是否在闭包类型中为通过引用捕获的实体声明了其他未命名的非静态数据成员.

this通过参考捕获.但现在§5.1.2/ 17指出:

[...]如果this被捕获,则每个odr-use this转换为对闭包类型的相应未命名数据成员的访问,[...]

据我所知,这意味着闭包类型中必须有一个与this指针对应的未命名数据成员.但由于this通过引用捕获的,因此标准不要求存在这样的成员.我有什么问题?

rmc*_*lan 0

我认为您发现了一个规范错误 - 您是正确的,因为它this是通过引用捕获的,但是您在 \xc2\xa75.1.2/17 中找到的文本应该仅适用于this通过副本捕获的情况。

\n\n

但正如凯西所说,通过引用来捕获并没有多大意义this

\n