On Tuesday, 2 May 2017 at 17:08:11 UTC, Juanjo Alvarez wrote:
struct S { int someState; void some_foo() { return this. someState;}void delegate() foo; void enable() { foo = &some_foo; } }
That's actually illegal in D. It will compile, but has undefined behavior because the compiler is free to move the struct around without giving you a chance to update the delegate. You are liable for random crashes doing that.
You'd be better off using a function pointer instead of a delegate and making the user pass `this` to it explicitly, or making it a class rather than a struct, which the compiler will not move. (or a struct only ever used by pointer, a diy class basically)
