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"); }