Лямбда-захват, инициализаторы и вложенная структура - PullRequest
1 голос
/ 07 февраля 2020

Может кто-нибудь объяснить, что здесь происходит (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.

1 Ответ

2 голосов
/ 07 февраля 2020

Должна быть ошибка в G CC 7.x, так как 8.1 принимает ее. https://godbolt.org/z/xXw6qN

...