Lambda捕获,初始化器和嵌套结构

有人可以解释这里发生了什么(GCC 7.3):

#include <thread>
#include <iostream>

struct A
{
    struct B {};
};

int main()
{
    int var = 0;
    std::thread([c=A::B(), var](){ });     // error: ‘var’ was not declared in this scope
    std::thread([c=A(), var](){ });        // OK
    std::thread([c=A::B(), var=var](){ }); // OK
    return 0;
}

当我捕获嵌套结构时,我得到:

未在此范围内声明“ var”

另一方面,捕获非嵌套结构作品。通过初始化也可以捕获。同样,所有情况都可以在Visual Studio中使用。

评论