// Copyright 2012 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. #![feature(box_syntax)] struct Foo { f: isize, } impl Foo { fn foo(self: isize, x: isize) -> isize { //~ ERROR invalid `self` type self.f + x } } struct Bar { f: T, } impl Bar { fn foo(self: Bar, x: isize) -> isize { //~ ERROR invalid `self` type x } fn bar(self: &Bar, x: isize) -> isize { //~ ERROR invalid `self` type x } } trait SomeTrait { fn dummy1(&self); fn dummy2(&self); fn dummy3(&self); } impl<'a, T> SomeTrait for &'a Bar { fn dummy1(self: &&'a Bar) { } fn dummy2(self: &Bar) {} //~ ERROR mismatched method receiver //~^ ERROR mismatched method receiver fn dummy3(self: &&Bar) {} //~^ ERROR mismatched method receiver //~| expected type `&&'a Bar` //~| found type `&&Bar` //~| lifetime mismatch //~| ERROR mismatched method receiver //~| expected type `&&'a Bar` //~| found type `&&Bar` //~| lifetime mismatch } fn main() { let foo = box Foo { f: 1, }; println!("{}", foo.foo(2)); let bar = box Bar { f: 1, }; println!("{} {}", bar.foo(2), bar.bar(2)); }