On 03/01/2016 05:11 PM, asdf wrote: > import std.stdio : writeln; > > struct foo > { > long* bar; > > this (long l) > { > long d = l; > bar = &d;
Unfortunately, 'bar' is pointing at the temporary stack-based variable 'd'. > } > } > > int main() > { > foo f = foo(12345); > writeln(*f.bar); That's undefined behavior because f.bar is pointing at a dead object (d). > //writefoo(f); > writeln(*f.bar); > > return 0; > } > > void writefoo(foo f) > { > writeln(*f.bar); > } > > > If I compile this with dmd, I get the obvious output > 12345 > 12345 Yeah, undefined behavior sometimes produces "obvious" outputs. ;) Ali