Re: struct is not copyable because it is annotated with @disable bugs ?

2019-07-27 Thread Newbie2019 via Digitalmars-d-learn

On Saturday, 27 July 2019 at 17:13:45 UTC, Adam D. Ruppe wrote:
If you change that to just plain `return NodeList(a, b);`, 
while keeping the first line, it will compile too.


The reason here is when you return and construct together, it 
constructs it in-place. But if you put it in a local variable 
first, it needs to copy it to the return value.


Removing the first line just lets the compiler optimize out the 
local variable, reducing it to the in-place one again.


But explicitly returning and constructing together works in 
either case.


Thanks your for the very quick and good explain.

I thinks the DMD should report a more helpful error about this.


Re: struct is not copyable because it is annotated with @disable bugs ?

2019-07-27 Thread Adam D. Ruppe via Digitalmars-d-learn

On Saturday, 27 July 2019 at 16:59:44 UTC, Newbie2019 wrote:

auto list = NodeList(a, b);


If you change that to just plain `return NodeList(a, b);`, while 
keeping the first line, it will compile too.


The reason here is when you return and construct together, it 
constructs it in-place. But if you put it in a local variable 
first, it needs to copy it to the return value.


Removing the first line just lets the compiler optimize out the 
local variable, reducing it to the in-place one again.


But explicitly returning and constructing together works in 
either case.


struct is not copyable because it is annotated with @disable bugs ?

2019-07-27 Thread Newbie2019 via Digitalmars-d-learn



I think this is a bug.

If I return a struct more than one times,  will throw this error.
If I return once,  every thing is ok.

https://run.dlang.io/is/T4kWKM


ref auto getList() return scope {
		if( i ) return NodeList(null); // remove this line will fix 
this error

A* a;
B* b;
auto list = NodeList(a, b);
return list;
}