trait Foo { fn f(~self); } struct S { x: int } impl S : Foo { fn f(~self) { assert self.x == 3; } } fn main() { let x = ~S { x: 3 }; let y = x as ~Foo; y.f(); y.f(); y.f(); }