<div dir="ltr"><div style="font-size:12.8000001907349px"><div>Template mixin scope seems to have a weird behavior:</div><div>I don't understand 'WEIRD(1)' and 'WEIRD(2)' below.</div><div><br></div><div>import std.stdio;</div><div>struct A{</div><div>  int b;</div><div>  this(int b){</div><div>    this.b=b;</div><div>    writeln("A.begin");</div><div>  }</div><div>  ~this(){</div><div>    writeln("A.end");</div><div>  }</div><div>}</div><div><br></div><div>mixin template Entry(){</div><div>  auto a=A(12);</div><div>}</div><div><br></div><div>void test1(){</div><div>  writeln("test.begin");</div><div>  mixin Entry;</div><div>  writeln(a.b);//WEIRD! destructor has been called but a.b is still alive</div><div>  writeln("test.end");</div><div>}</div><div><br></div><div>void test2(){</div><div>  writeln("test.begin");</div><div>  auto a=A(0);</div><div>  writeln("test.end");</div><div>}</div><div><br></div><div>void test3(){</div><div>  writeln("test.begin");</div><div>  mixin("auto a=A(0);");</div><div>  writeln("test.end");</div><div>}</div><div><br></div><div>void main(){</div><div>  test1;</div><div>  writeln;</div><div>  test2;</div><div>  writeln;</div><div>  test3;</div><div>}</div></div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">output:</div><div style="font-size:12.8000001907349px">----------------</div><div style="font-size:12.8000001907349px"><div>test.begin</div><div>A.begin</div><div>A.end //WEIRD(1): why is destructor called before test.end?</div><div>12 //WEIRD(2): destructor has been called but a.b is still alive</div><div>test.end</div><div><br></div><div>test.begin</div><div>A.begin</div><div>test.end</div><div>A.end</div><div><br></div><div>test.begin</div><div>A.begin</div><div>test.end</div><div>A.end</div></div><div style="font-size:12.8000001907349px">----------------</div></div>