On Tuesday, 9 February 2016 at 13:45:13 UTC, Hara Kenji wrote:
On Tuesday, 9 February 2016 at 00:25:33 UTC, Matt Elkins wrote:
On Thursday, 4 February 2016 at 02:33:06 UTC, Andrei Alexandrescu wrote:
Got it, thanks. That's a bug in the implementation, no two ways about it. No copy should occur there, neither theoretically nor practically. Please report it to bugzilla at http://issues.dlang.org. Thanks very much! -- Andrei

Done (sorry for the delay): https://issues.dlang.org/show_bug.cgi?id=15662

I've replied to issue 15662.

The point of that issue is, an array concatenation or appending may cause the elements' copy. The copy occurrence is determined by the runtime situation, so compiler needs to reject such the operation for the @disable this(this) elements conservatively.

Kenji Hara

Actually, I have a follow-up question about this: when you say that an array concatenation may cause the elements' copy, do you mean only the element being appended? Or can elements already in the array be copied? If the latter, isn't it a problem that my workaround for appending non-copyable objects into the array compiles?

My workaround is like this (typing directly without testing):

// Foo has opAssign defined for rvalues, but post-blit and opAssign for lvalues disabled
Foo[] fooArray;
++fooArray.length;
fooArray[$ - 1] = Foo();


Reply via email to