Может кто-нибудь объяснить, что здесь происходит (G CC 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' не был объявлен в этой области
С другой стороны, захватывает не вложенные структуры struct. Также захват с инициализацией работает. Также все кейсы работают в Visual Studio.