import std.stdio; struct S { string m_str = "defaultString"; this(this) { writeln("In this(this)"); } ~this() { writeln("In ~this():"~m_str); } } struct Holder { S[] m_arr; S m_s; this(S[] arr) { m_arr = arr; m_s.m_str="H.m_s"; } S getSMem() { return m_s; } S getSVec() { return m_arr[0]; } S getSLocal() { S local = S("localString"); return local; } } void main() { Holder h = Holder(new S[1]); S s1 = h.getSMem(); S s2 = h.getSVec(); S s3 = h.getSLocal(); } The above in Windows D2.058 produces: In this(this) In ~this():localString In ~this():defaultString In ~this():H.m_s In ~this():H.m_s Only one postblit is produced in the above (from the getSMem() call). The getSLocal() call can just move the struct. However, getSVec() does not result in a postblit. I noticed this in the context of a reference counting struct held in a std.container.Array, and there were too few calls to this(this) compared to ~this(). This issue was discussed in: http://stackoverflow.com/questions/9344579/why-is-thisthis-not-called-when-returning-from-array-of-structs
*** This issue has been marked as a duplicate of issue 7530 ***