| struct Foo { |
| f: isize, |
| } |
| |
| |
| |
| impl Foo { |
| fn foo(self: isize, x: isize) -> isize { |
| //~^ ERROR invalid `self` parameter type |
| self.f + x //~ ERROR: doesn't have fields |
| } |
| } |
| |
| struct Bar<T> { |
| f: T, |
| } |
| |
| impl<T> Bar<T> { |
| fn foo(self: Bar<isize>, x: isize) -> isize { |
| //~^ ERROR invalid `self` parameter type |
| x |
| } |
| fn bar(self: &Bar<usize>, x: isize) -> isize { |
| //~^ ERROR invalid `self` parameter type |
| x |
| } |
| } |
| |
| trait SomeTrait { |
| fn dummy1(&self); |
| fn dummy2(&self); |
| fn dummy3(&self); |
| } |
| |
| impl<'a, T> SomeTrait for &'a Bar<T> { |
| fn dummy1(self: &&'a Bar<T>) { } |
| fn dummy2(self: &Bar<T>) {} //~ ERROR mismatched `self` parameter type |
| //~^ ERROR mismatched `self` parameter type |
| //~| ERROR has an incompatible type for trait |
| fn dummy3(self: &&Bar<T>) {} |
| //~^ ERROR mismatched `self` parameter type |
| //~| expected reference `&'a Bar<_>` |
| //~| found reference `&Bar<_>` |
| //~| lifetime mismatch |
| //~| ERROR mismatched `self` parameter type |
| //~| expected reference `&'a Bar<_>` |
| //~| found reference `&Bar<_>` |
| //~| lifetime mismatch |
| } |
| |
| fn main() { |
| let foo = Box::new(Foo { |
| f: 1, |
| }); |
| println!("{}", foo.foo(2)); |
| //~^ ERROR: no method named `foo` |
| let bar = Box::new(Bar { |
| f: 1, |
| }); |
| println!("{} {}", bar.foo(2), bar.bar(2)); |
| //~^ ERROR: no method named `bar` |
| } |