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);
}