Следующие компиляции. Но существует ли какая-либо проблема обмана?
class Foo {
Foo(std::function<void(int)> fn) { /* etc */ }
}
void f(int i, Foo& foo) { /* stuff with i and foo */ }
Foo foo([&foo](int i){f(i, foo);});
Кажется, нужно работать. (Настоящая лямбда, конечно, сложнее.)