Initialise non-copyable, non-default-constrauctable member struct

aliak something at something.com
Fri Jul 27 13:05:07 UTC 2018


On Friday, 27 July 2018 at 12:11:37 UTC, Peter Particle wrote:
> Question is related to this:
> https://dlang.org/spec/struct.html#disable_default_construction
>
> struct S {
>     int x;
>     @disable this();     // Disables default construction
>     @disable this(this); // Disable copying
>
>     this(int v) { x = v; }
> }
>
> struct T {
>     float y;
>     S s;
>     @disable this();     // Disables default construction
>     @disable this(this); // Disable copying
>
>     this(float v) {
>         y = v;
>
>         s = S(cast(int)v);    // tried option 1
>         s.__ctor(cast(int)v); // tried option 2
>
>     }
> }
>
> Error: struct `S` is not copyable because it is annotated with 
> `@disable`
> in both cases.
>
> Is there some way around this problem?

This works on the latest dmd:

struct S {
     int x;
     @disable this();     // Disables default construction
     @disable this(this); // Disable copying

     this(int v) { x = v; }
}

struct T {
     float y;
     S s;
     @disable this();     // Disables default construction
     @disable this(this); // Disable copying

     this(float v) {
         y = v;
         s = S(cast(int)v);
     }
}

void main() {
     auto s = T(3);
}

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


More information about the Digitalmars-d-learn mailing list