Base: type = { operator=: (out this) = { } operator=: (out this, that) = std::cout << "(out this, that)\n"; operator=: (implicit out this, _) = std::cout << "(implicit out this, _)\n"; } Derived: type = { this: Base = (); operator=: (out this) = { } operator=: (out this, that) = { } operator=: (inout this, move that) = { } } main: () = { d := Derived(); d2 := d; d2 = d; }