File tree 2 files changed +48
-0
lines changed
src/test/ui/higher-rank-trait-bounds/normalize-under-binder
2 files changed +48
-0
lines changed Original file line number Diff line number Diff line change 11
11
fn main ( ) {
12
12
foo :: < Vec < u32 > > ( vec ! [ ] ) ;
13
13
}
14
+
15
+ mod another {
16
+ use std:: ops:: Deref ;
17
+
18
+ fn test < T , TDeref > ( )
19
+ where
20
+ T : Deref < Target = TDeref > ,
21
+ TDeref : ?Sized ,
22
+ for < ' a > & ' a TDeref : IntoIterator ,
23
+ for < ' a > <& ' a TDeref as IntoIterator >:: IntoIter : Clone ,
24
+ {
25
+ }
26
+
27
+ fn main ( ) {
28
+ test :: < Vec < u8 > , _ > ( ) ;
29
+ }
30
+ }
Original file line number Diff line number Diff line change
1
+ // check-pass
2
+
3
+ trait Variable < ' a > {
4
+ type Type ;
5
+ }
6
+
7
+ impl Variable < ' _ > for ( ) {
8
+ type Type = ( ) ;
9
+ }
10
+
11
+ fn check < F , T > ( _: F )
12
+ where
13
+ F : Fn ( T ) , // <- if removed, all fn_* then require type annotations
14
+ F : for < ' a > Fn ( <T as Variable < ' a > >:: Type ) ,
15
+ T : for < ' a > Variable < ' a > ,
16
+ {
17
+ }
18
+
19
+ fn test ( arg : impl Fn ( ( ) ) ) {
20
+ fn fn_1 ( _: ( ) ) { }
21
+ let fn_2 = |_: ( ) | ( ) ;
22
+ let fn_3 = |a| fn_1 ( a) ;
23
+ let fn_4 = arg;
24
+
25
+ check ( fn_1) ; // Error
26
+ check ( fn_2) ; // Ok
27
+ check ( fn_3) ; // Ok
28
+ check ( fn_4) ; // Error
29
+ }
30
+
31
+ fn main ( ) { }
You can’t perform that action at this time.
0 commit comments