Closures in the functional programming sense don't really exist in C++. "Closing over" a value means something quite specific, and C++ captures don't do this; they merely copy by value or reference an outside entity. The only way to get close to it is if your C++ lambdas exclusively capture and thus increment the reference count of shared pointers only, and no other types. Not exactly idiomatic.