Это, в основном, вопрос типа одного типа лайнера, я бы обычно писал этот код в нескольких строках в любом случае для удобства чтения.
Итак, мой вопрос: могу ли я назвать рекурсивную лямбду в том же самом утверждении, где она определена?
Итак, вместо этого:
int n=3;
function<void(int)> f {[n,&f](int i){if (i>1) { cout << "func(a, "; f(i-1); cout << ")";} else cout << "a";}};
f(n);
вызовите функцию с n
в той же строке, где f определен.