http://d.puremagic.com/issues/show_bug.cgi?id=6581
--- Comment #6 from Dmitry Olshansky <dmitry.o...@gmail.com> 2011-09-20 13:01:11 PDT --- > > I should point out that move == swap & destroy, iff left side of assigment > > _was_ initialized. A constructor may be called on chunk of uninitialized > > memory > > e.g. in Phobos std.typecons.emplace. > > In B's constructor, the member a is already intialized by A.init. So `a = > A(dummy);` is always assignment. Example: ubyte[B.sizeof] mem=void; emplace!B(mem.ptr);//Does this call to B's constructor call A's dtor on some kind of trash then? > > And, yes, I think using emplace is right way to *initialize* member a. > And that's a problem. I mean even when emplace is working and all. Do we really want everybody to write emplace(&a, dummy); to do initialization in constructor? Seems very backwards. I'd hate it if this will be some kind of rule #22 of how to do things correctly in D. > emplace(&a, dummy); // a is treated as an uninitialized memory > > But, unfortunately, emplace has a bug. This does not work as our expected. > > > > why do we copying the original value in the first place? > > It should be moved with e.g. memmov > > Ah... my explanation had a bit misleading. When opAssign receives rvalue, rhs > is just moved. Otherwise, rhs is coped. In this case, A(dummy) is treated as > rvalue, so it is moved. Ok, glad it works this way. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------