On Wednesday, 17 May 2017 at 07:08:07 UTC, bauss wrote:
On Wednesday, 17 May 2017 at 03:08:39 UTC, Timothee Cour wrote:
NOTE: curious about both cases:
* thread local
* shared
On Tue, May 16, 2017 at 8:04 PM, Timothee Cour
<thelastmamm...@gmail.com> wrote:
what's the best D equivalent of C++11's function local static
initialization?
```
void fun(){
static auto a=[](){
//some code
return some_var;
}
}
```
(C++11 guarantees thread safety)
I don't know the exact equivalent, mostly because I don't
really know what the C++ statement does tbh. Tried to look it
up real quick, but can't seem to find anything actual
information on it.
It initializes a global variable "a" once from an unnamed class
object with a "opCall" style method on it.
Lambdas in C++ are regular objects with some syntactical sugar
over it.
http://en.cppreference.com/w/cpp/language/storage_duration#Static_local_variables
«If multiple threads attempt to initialize the same static local
variable concurrently, the initialization occurs exactly once
(similar behavior can be obtained for arbitrary functions with
std::call_once).
Note: usual implementations of this feature use variants of the
double-checked locking pattern, which reduces runtime overhead
for already-initialized local statics to a single non-atomic
boolean comparison.»