/* TEST_OUTPUT: --- fail_compilation/fail10115.d(35): Error: cannot have `out` parameter of type `S` because the default construction is disabled fail_compilation/fail10115.d(35): Error: cannot have `out` parameter of type `E` because the default construction is disabled fail_compilation/fail10115.d(35): Error: cannot have `out` parameter of type `U` because the default construction is disabled fail_compilation/fail10115.d(40): Error: struct `fail10115.S` default construction is disabled fail_compilation/fail10115.d(41): Error: struct `fail10115.S` default construction is disabled fail_compilation/fail10115.d(42): Error: union `fail10115.U` default construction is disabled --- */ struct S { int a; @disable this(); //this(int) { a = 1; } //~this() { assert(a !is 0); } } enum E : S { A = S.init } union U { S s; //this(this) { assert (s.a !is 0); } //~this() { assert (s.a !is 0); } } void main() { void foo(out S s, out E e, out U u) { } S[] a; E[] e; U[] u; a.length = 5; // compiles -> NG e.length = 5; // compiles -> NG u.length = 5; // compiles -> NG S[1] x = (S[1]).init; foo(a[0], // compiles -> NG e[0], // compiles -> NG u[0]); // compiles -> NG }