In JavaScript it's quite common to see self executing lambdas like this (not empty though), because there variables have function scope rather than block scope so it's a way to limit the scope and capture closures. Does it have any practical use in c++?
void foo() {
// initialized once when foo is first called
static auto lazy_data = ...;
// use lazy_data...
}
As of c++11, the compiler is required to make this threadsafe (initializer only runs once, even if foo() is called concurrently), typically by inserting locks.
Since this only applies to the initializer, for complex initialization a self-executing lambda can be used:
void foo() {
static auto lazy_data = []{
auto data = new Whatever();
// initialize data...
return data;
}();
// use lazy_data...
}