advise about safety of using move in an opAssign with __traits(isRef

Paul Backus snarwin at
Sat Aug 17 16:43:51 UTC 2019

On Friday, 16 August 2019 at 08:07:28 UTC, aliak wrote:
> Hi, I'm trying to fix a use-case where you have a wrapper 
> template type (it's an optional) and the wrapping type has 
> @disable this(this). And having this scenario work:
> struct S {
>   @disable this(this);
> }
> Optional!S fun() {...}
> Optional!S a;
> a = fun.move;
> Now that won't work because of the disabled copy

Are you sure? I tried to reproduce the error you're describing, 
and I couldn't do it. The following compiles and runs without any 

struct Wrapper(T) { T value; }
struct NoCopy { @disable this(this); }

Wrapper!NoCopy fun()
     return Wrapper!NoCopy();

void main()
     Wrapper!NoCopy a;
     a = fun(); // already an rvalue, so moved implicitly

Can you give a more complete example of the problem you're having?

More information about the Digitalmars-d-learn mailing list