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 issues:

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?

Reply via email to