On Tuesday, 16 February 2016 at 08:18:51 UTC, Ali Çehreli wrote:
When a temporary Foo object is moved into the array, the
temporary object is set to Foo.init. This temporary object
lives on the stack. In fact, all temporary Foo objects of
Foo.this(int) live at the same location.
After Foo(8) is moved into the array and set to Foo.init, now
Foo(1) is constructed on top of it. For that to happen, first
the destructor is executed for the first life of the temporary,
and so on...
There is one less Foo.init destruction because conceptually the
initial temporary was not constructed on top of an existing
Foo.init but raw memory.
I guess that makes sense. But doesn't it imply that a copy is
happening, despite the @disabled post-blit? The desired behavior
was to construct the Foos in place, like with a C++ initializer
list.