var _nextId = 0; nextId() { var id = _nextId; _nextId += 1; return id; } record Test ( id : Int ); overload RegularRecord?(static Test) = false; overload Test(id:Int) returned:Test { println("construct Test(id) ", id); returned.id = id; } overload Test() returned:Test { var id = nextId(); println("construct Test ", id); returned.id = id; } overload Test(src:Test) returned:Test { println("copy Test ", src.id); returned.id = src.id; } overload moveUnsafe(src:Test) returned:Test { println("move Test ", src.id); returned.id = src.id; } overload resetUnsafe(x:Test) { var id = nextId(); println("reset Test ", id); x.id = id; } overload destroy(x:Test) { println("destroy Test ", x.id); } overload assign(dest:Test, src:Test) { dest.id = src.id; } main() { var a = Vector(map(Test, range(3))); }