]> git.lizzy.rs Git - rust.git/blob - tests/ui/self/ufcs-explicit-self.rs
Rollup merge of #103702 - WaffleLapkin:lift-sized-bounds-from-pointer-methods-where...
[rust.git] / tests / ui / self / ufcs-explicit-self.rs
1 // run-pass
2 #![allow(dead_code)]
3
4 #[derive(Copy, Clone)]
5 struct Foo {
6     f: isize,
7 }
8
9 impl Foo {
10     fn foo(self: Foo, x: isize) -> isize {
11         self.f + x
12     }
13     fn bar(self: &Foo, x: isize) -> isize {
14         self.f + x
15     }
16     fn baz(self: Box<Foo>, x: isize) -> isize {
17         self.f + x
18     }
19 }
20
21 #[derive(Copy, Clone)]
22 struct Bar<T> {
23     f: T,
24 }
25
26 impl<T> Bar<T> {
27     fn foo(self: Bar<T>, x: isize) -> isize {
28         x
29     }
30     fn bar<'a>(self: &'a Bar<T>, x: isize) -> isize {
31         x
32     }
33     fn baz(self: Bar<T>, x: isize) -> isize {
34         x
35     }
36 }
37
38 fn main() {
39     let foo: Box<_> = Box::new(Foo {
40         f: 1,
41     });
42     println!("{} {} {}", foo.foo(2), foo.bar(2), foo.baz(2));
43     let bar: Box<_> = Box::new(Bar {
44         f: 1,
45     });
46     println!("{} {} {}", bar.foo(2), bar.bar(2), bar.baz(2));
47     let bar: Box<Bar<isize>> = bar;
48     println!("{} {} {}", bar.foo(2), bar.bar(2), bar.baz(2));
49 }