void a(inout Object foo) { foo = new B(); } void b(A foo) { foo.bar = 1; foo = new B(); } void main() { A ao = new A(); b(ao); // ao has not changed, but a.bar is now 1 a(ao); // ao is now a B }