| struct X { | |
| int* rc; | |
| this (int n) { auto x = new int[](1); rc = x.ptr; *rc = n; } | |
| this (this) { ++*rc; } | |
| ~this () { --*rc; } | |
| @disable void opAssign (X src); | |
| } | |
| struct Y { | |
| X x; | |
| } | |
| void frob(X x) | |
| { | |
| Y y = { x: x }; | |
| // The 'rc' counter starts from 1 and gets bumped when: | |
| // - 'f0' is passed to 'frob' | |
| // - 'y' is initialized with 'x' | |
| assert(*y.x.rc == 3); | |
| } | |
| void main () | |
| { | |
| auto f0 = X(1); | |
| frob(f0); | |
| } |