| /* |
| TEST_OUTPUT: |
| --- |
| fail_compilation/disable.d(56): Error: function `disable.DisabledOpAssign.opAssign` cannot be used because it is annotated with `@disable` |
| fail_compilation/disable.d(59): Error: function `disable.DisabledPostblit.opAssign` cannot be used because it is annotated with `@disable` |
| fail_compilation/disable.d(62): Error: function `disable.HasDtor.opAssign` cannot be used because it is annotated with `@disable` |
| fail_compilation/disable.d(66): Error: generated function `disable.Nested!(DisabledOpAssign).Nested.opAssign` cannot be used because it is annotated with `@disable` |
| fail_compilation/disable.d(69): Error: generated function `disable.Nested!(DisabledPostblit).Nested.opAssign` cannot be used because it is annotated with `@disable` |
| fail_compilation/disable.d(72): Error: generated function `disable.Nested!(HasDtor).Nested.opAssign` cannot be used because it is annotated with `@disable` |
| fail_compilation/disable.d(76): Error: generated function `disable.NestedDtor!(DisabledOpAssign).NestedDtor.opAssign` cannot be used because it is annotated with `@disable` |
| fail_compilation/disable.d(79): Error: generated function `disable.NestedDtor!(DisabledPostblit).NestedDtor.opAssign` cannot be used because it is annotated with `@disable` |
| fail_compilation/disable.d(82): Error: generated function `disable.NestedDtor!(HasDtor).NestedDtor.opAssign` cannot be used because it is annotated with `@disable` |
| fail_compilation/disable.d(84): Error: enum member `disable.Enum1.value` cannot be used because it is annotated with `@disable` |
| --- |
| */ |
| struct DisabledOpAssign { |
| int x; |
| @disable void opAssign(const DisabledOpAssign); |
| } |
| |
| struct DisabledPostblit { |
| int x; |
| @disable void opAssign(const DisabledPostblit); |
| // Doesn't require opAssign |
| @disable this(this); |
| } |
| |
| struct HasDtor { |
| int x; |
| @disable void opAssign(const HasDtor); |
| ~this() {} // Makes opAssign mandatory |
| } |
| |
| |
| struct Nested (T) |
| { |
| T b; |
| } |
| |
| struct NestedDtor (T) |
| { |
| T b; |
| |
| // Requires an identity opAssign |
| ~this() {} |
| } |
| |
| enum Enum1 |
| { |
| @disable value |
| } |
| |
| void main () |
| { |
| DisabledOpAssign o; |
| o = DisabledOpAssign(); |
| |
| DisabledPostblit p; |
| p = DisabledPostblit(); |
| |
| HasDtor d; |
| d = HasDtor(); |
| |
| |
| Nested!(DisabledOpAssign) no; |
| no = Nested!(DisabledOpAssign)(); |
| |
| Nested!(DisabledPostblit) np; |
| np = Nested!(DisabledPostblit)(); |
| |
| Nested!(HasDtor) nd; |
| nd = Nested!(HasDtor)(); |
| |
| |
| NestedDtor!(DisabledOpAssign) ndo; |
| ndo = NestedDtor!(DisabledOpAssign)(); |
| |
| NestedDtor!(DisabledPostblit) ndp; |
| ndp = NestedDtor!(DisabledPostblit)(); |
| |
| NestedDtor!(HasDtor) ndd; |
| ndd = NestedDtor!(HasDtor)(); |
| |
| auto v1 = Enum1.value; |
| } |