delegates and temporary struct

Maxim Fomin maxim at maxim-fomin.ru
Thu May 16 19:21:24 PDT 2013


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


More information about the Digitalmars-d-learn mailing list