// 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: int, } impl Foo { fn foo(self: int, x: int) -> int { //~ ERROR mismatched self type self.f + x } } struct Bar { f: T, } impl Bar { fn foo(self: Bar, x: int) -> int { //~ ERROR mismatched self type x } fn bar(self: &Bar, x: int) -> int { //~ ERROR mismatched 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 self type fn dummy3(self: &&Bar) {} //~ ERROR lifetime mismatch //~^ ERROR 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)); }