DIP 1014

Shachar Shemesh shachar at weka.io
Wed Oct 3 09:57:39 UTC 2018


On 03/10/18 04:10, Walter Bright wrote:
> On 10/2/2018 4:30 PM, Adam D. Ruppe wrote:
>> On Tuesday, 2 October 2018 at 22:30:38 UTC, Jonathan M Davis wrote:
>>> Yeah. IIRC, it was supposed to be _guaranteed_ that the compiler 
>>> moved structs in a number of situations - e.g. when the return value 
>>> was an rvalue. Something like
>>
>> Eh, I don't think that moves it, but rather just constructs it 
>> in-place for the next call.
> 
> The technical term for that is "copy elision".

I'm not sure I follow.

First of all, you cannot elide the copy if there is more than one 
potential local variable you are returning, ala:

A someFunc() {
   A a, b;
   manipulate(a); manipulate(b);

   if( someRandomCondition )
     return a;

   return b;
}

What happens then?

What happens if A has @disable this(this)?

What happens if we explicitly call std.algorithm.move?

Shachar


More information about the Digitalmars-d mailing list