File tree 2 files changed +64
-0
lines changed
src/test/ui/type-alias-impl-trait
2 files changed +64
-0
lines changed Original file line number Diff line number Diff line change
1
+ #![ feature( min_type_alias_impl_trait) ]
2
+ #![ feature( type_alias_impl_trait) ]
3
+ #![ allow( incomplete_features) ]
4
+
5
+ pub trait Foo { }
6
+
7
+ pub trait Bar {
8
+ type Foo : Foo ;
9
+
10
+ fn foo ( ) -> Self :: Foo ;
11
+ }
12
+
13
+ pub trait Baz {
14
+ type Foo : Foo ;
15
+ type Bar : Bar < Foo = Self :: Foo > ;
16
+
17
+ fn foo ( ) -> Self :: Foo ;
18
+ fn bar ( ) -> Self :: Bar ;
19
+ }
20
+
21
+ impl Foo for ( ) { }
22
+
23
+ impl Bar for ( ) {
24
+ type Foo = FooImpl ;
25
+
26
+ fn foo ( ) -> Self :: Foo {
27
+ ( )
28
+ }
29
+ }
30
+
31
+ // FIXME(#86731): The below is illegal use of `min_type_alias_impl_trait`
32
+ // but the compiler doesn't report it, we should fix it.
33
+ pub type FooImpl = impl Foo ;
34
+ pub type BarImpl = impl Bar < Foo = FooImpl > ;
35
+ //~^ ERROR: type mismatch resolving `<() as Bar>::Foo == ()`
36
+
37
+ impl Baz for ( ) {
38
+ type Foo = FooImpl ;
39
+ type Bar = BarImpl ;
40
+
41
+ fn foo ( ) -> Self :: Foo {
42
+ ( )
43
+ }
44
+
45
+ fn bar ( ) -> Self :: Bar {
46
+ ( )
47
+ }
48
+ }
49
+
50
+ fn main ( ) { }
Original file line number Diff line number Diff line change
1
+ error[E0271]: type mismatch resolving `<() as Bar>::Foo == ()`
2
+ --> $DIR/issue-63355.rs:34:20
3
+ |
4
+ LL | pub type FooImpl = impl Foo;
5
+ | -------- the found opaque type
6
+ LL | pub type BarImpl = impl Bar<Foo = FooImpl>;
7
+ | ^^^^^^^^^^^^^^^^^^^^^^^ expected `()`, found opaque type
8
+ |
9
+ = note: expected unit type `()`
10
+ found opaque type `impl Foo`
11
+
12
+ error: aborting due to previous error
13
+
14
+ For more information about this error, try `rustc --explain E0271`.
You can’t perform that action at this time.
0 commit comments