]> git.proxmox.com Git - rustc.git/blame - src/test/ui/associated-types/associated-types-return.rs
New upstream version 1.67.1+dfsg1
[rustc.git] / src / test / ui / associated-types / associated-types-return.rs
CommitLineData
b7449926 1// run-pass
1a4d82fc
JJ
2// Test equality constraints on associated types in a where clause.
3
c34b1796 4
1a4d82fc
JJ
5pub trait Foo {
6 type A;
7 fn boo(&self) -> <Self as Foo>::A;
8}
9
62682a34 10#[derive(PartialEq, Debug)]
c34b1796 11pub struct Bar;
1a4d82fc 12
c34b1796
AL
13impl Foo for isize {
14 type A = usize;
15 fn boo(&self) -> usize { 42 }
1a4d82fc
JJ
16}
17
18impl Foo for Bar {
c34b1796
AL
19 type A = isize;
20 fn boo(&self) -> isize { 43 }
1a4d82fc
JJ
21}
22
23impl Foo for char {
24 type A = Bar;
25 fn boo(&self) -> Bar { Bar }
26}
27
28fn foo1<I: Foo<A=Bar>>(x: I) -> Bar {
29 x.boo()
30}
31
32fn foo2<I: Foo>(x: I) -> <I as Foo>::A {
33 x.boo()
34}
35
36pub fn main() {
85aaf69f 37 let a = 42;
62682a34 38 assert_eq!(foo2(a), 42);
1a4d82fc
JJ
39
40 let a = Bar;
62682a34 41 assert_eq!(foo2(a), 43);
1a4d82fc
JJ
42
43 let a = 'a';
44 foo1(a);
62682a34 45 assert_eq!(foo2(a), Bar);
1a4d82fc 46}