import std.algorithm; struct S { int x; ~this() { assert(x == 0); // Line7 } } S foo(S s) { return move(s); } void main() { S a; a.x = 0; auto b = foo(a); assert(b.x == 0); }
Sorry, I accidentally posted that is only half written. (In reply to comment #0) > import std.algorithm; > struct S > { > int x; > ~this() > { > assert(x == 0); // Line7 > } > } > S foo(S s) > { > return move(s); > } > void main() > { > S a; > a.x = 0; > auto b = foo(a); > assert(b.x == 0); > } output: ---- core.exception.AssertError@test(7): Assertion failure This regression is introduced this commit: https://github.com/D-Programming-Language/phobos/commit/71b1c1a In unary move(), result is uninitialized. If T has an elaborate destructor, it is called on corrupted memory.
https://github.com/D-Programming-Language/phobos/pull/572
Commits pushed to master at https://github.com/D-Programming-Language/phobos https://github.com/D-Programming-Language/phobos/commit/279963c9d0351809f1cab76f861af8a4832c1ec9 fix Issue 8055 - std.algorithm.move corrupts moved object field https://github.com/D-Programming-Language/phobos/commit/892038953dfd645952a482a06f692ea6fba2f437 Merge pull request #572 from 9rnsr/fix_move Issue 8055 & 8057 - Fix std.algorithm.move issues