Почему сохраняется значение переменной в контексте другой функции?

Подскажите, пожалуйста, почему, когда я вызываю лямбда-функцию несколько раз подряд, то значение переменной а сохраняется и в консоли выводится 1,2:

auto fun()
{
    int a = 1;
    std::cout << "fun A:" << a << std::endl;

    return  [&]()
    {
            std::cout <<"Lambda A:" << a++ << std::endl;
    };
    
}

int main()
{

    auto y = fun();
    y();
    y();    
}

Но если я между вызовом лямбды-функции вызову саму функцию fun(), то ее значение сбрасывается и в консоли я получаю 1,1?

auto fun()
{
    int a = 1;
    std::cout << "fun A:" << a << std::endl;

    return  [&]()
    {
            std::cout <<"Lambda A:" << a++ << std::endl;
    };
    
}

int main()
{

    auto y = fun();
    y();
    fun();
    y();
}

Ответы (0 шт):