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