On Thursday, 16 May 2013 at 22:53:56 UTC, Jack Applegame wrote:
Look at this code:
import std.stdio;

class Foo {
int value = 123456;
}

struct Bar {
this(Foo f) { foo = f; }
@property auto lambda() {
  return (){ writefln("value = %s", foo.value); };
}
Foo foo;
}
auto getLambda(Foo f) {
return Bar(f).lambda; // lambda closure points to temporary Bar on the stack
}
void main() {
Foo foo = new Foo;
auto lambda = getLambda(foo);
lambda(); // undefined behaviour? prints some number, but not 123456
}
It compiles, but result is unpredictable.

Platform: Windows 7, dmd 2.062

For reproducing this behaviour it's necessary to omit -inline and -O flags, try simple "rdmd test.d"

http://d.puremagic.com/issues/show_bug.cgi?id=9352

Reply via email to