| string result; | |
| struct S | |
| { | |
| this(this) | |
| { | |
| result ~= "A"; | |
| } | |
| ~this() | |
| { | |
| result ~= "B"; | |
| } | |
| } | |
| void foo(const(S)[] ar...) | |
| { | |
| /* postblit gets called on this initialization, | |
| * then when the function returns, the destructor | |
| * gets called => result = "AB"; | |
| */ | |
| auto d = ar[0]; | |
| } | |
| void bar() | |
| { | |
| /* S(null) needs to be destroyed after the function call, | |
| * that means that another `B` is appended => result = "ABB" | |
| */ | |
| foo(S()); | |
| } | |
| void main() | |
| { | |
| bar(); | |
| assert(result == "ABB"); | |
| } |