What the compiler actually generates when you write a C++ lambda expression:
int multiplier = 5;
auto lambda = [multiplier](int x) { return x * multiplier; };The compiler generates an anonymous unique class (closure type):
class __Lambda_123 {
int multiplier; // Captured member variable
public:
__Lambda_123(int m) : multiplier(m) {}
int operator()(int x) const { return x * multiplier; }
};A stateless lambda ([](){}) also synthesizes a conversion operator to a plain C function pointer (+lambda), allowing it to be passed directly to legacy C callbacks!