Вы можете сделать i
аргументом для функции.
#include <iostream>
using namespace std;
template<typename Functor>
void foo(Functor func)
{
auto test = [](Functor f){ f(5); };
test(func);
}
int main()
{
foo([](int i){ cout << i << endl;});
}
В противном случае, я думаю, вы должны объявить i
в области видимости, доступной из обоих мест, например, как глобальная переменная:
#include <iostream>
using namespace std;
static int i; // <--- :(
template<typename Functor>
void foo(Functor func)
{
auto test = [](Functor f){ i = 5; f(); };
test(func);
}
int main()
{
foo([](){ cout << i << endl;});
}