This repository was archived by the owner on May 23, 2024. It is now read-only.
File tree 8 files changed +137
-0
lines changed
8 files changed +137
-0
lines changed Original file line number Diff line number Diff line change
1
+ #![ feature( trait_alias) ]
2
+ use core:: ops:: Add ;
3
+
4
+ pub trait DoSome < T > { }
5
+
6
+ // Trait alias causes compiler panic
7
+ pub trait Cell < T : Add < T , Output =T > > = DoSome < T > ;
8
+
9
+ struct _Container< T > {
10
+ pub cells: dyn Cell < T > ,
11
+ }
12
+
13
+
14
+ fn main ( ) { }
15
+
Original file line number Diff line number Diff line change
1
+ use std:: marker:: PhantomData as Boo ;
2
+
3
+ struct Gc < ' gc , T : ' gc > ( Boo < fn ( & ' gc T ) -> & ' gc T > ) ;
4
+
5
+ trait Rootable < ' env > {
6
+ type AsRoot < ' r > : Rootable < ' r > + ' r where ' env : ' r ;
7
+ }
8
+
9
+ impl < ' env , T : Rootable < ' env > > Rootable < ' env > for Gc < ' env , T > {
10
+ type AsRoot < ' r > = Gc < ' r , T :: AsRoot < ' r > > where ' env : ' r ;
11
+ }
12
+
13
+ impl < ' env > Rootable < ' env > for i32 {
14
+ type AsRoot < ' r > = i32 where ' env : ' r ;
15
+ }
16
+
17
+ fn reroot < ' gc , T : Rootable < ' gc > > ( _t : T , _f : for <' a > fn ( T :: AsRoot < ' a > ) ) {
18
+ }
19
+
20
+ fn test < ' gc > ( t : Gc < ' gc , i32 > ) {
21
+ reroot ( t, |_| ( ) ) ;
22
+ }
23
+
24
+ fn main ( ) { }
Original file line number Diff line number Diff line change
1
+ #![ feature( type_alias_impl_trait) ]
2
+
3
+ use std:: future:: Future ;
4
+
5
+ type FutNothing < ' a > = impl ' a + Future < Output = ( ) > ;
6
+
7
+ async fn operation ( x : & mut ( ) ) -> ( ) {
8
+ ( )
9
+ }
10
+
11
+ async fn indirect ( ) {
12
+ call ( operation) . await
13
+ }
14
+
15
+ async fn call < F > ( mut f : F )
16
+ where
17
+ for < ' any > F : FnMut ( & ' any mut ( ) ) -> FutNothing < ' any > ,
18
+ {
19
+ f ( & mut ( ) ) . await
20
+ }
21
+
Original file line number Diff line number Diff line change
1
+ #![ feature( type_alias_impl_trait) ]
2
+ type Opaque = impl Sized ;
3
+
4
+ fn get_rpit ( ) -> impl Clone { }
5
+
6
+ fn query ( _: impl FnOnce ( ) -> Opaque ) { }
7
+
8
+ fn test ( ) -> Opaque {
9
+ query ( get_rpit) ;
10
+ get_rpit ( )
11
+ }
12
+
13
+ fn main ( ) {
14
+ test ( ) ;
15
+ }
Original file line number Diff line number Diff line change
1
+ fn example ( var : i32 ) {
2
+ || {
3
+ let 0 = var;
4
+ } ;
5
+ }
6
+
7
+ fn main ( ) { }
Original file line number Diff line number Diff line change
1
+ #![ feature( non_lifetime_binders) ]
2
+
3
+ fn take ( _: impl for < T > FnOnce ( T ) -> T ) { }
4
+
5
+ fn main ( ) {
6
+ take ( |x| x)
7
+ }
8
+
Original file line number Diff line number Diff line change
1
+ fn ice ( )
2
+ where
3
+ for < ' w > fn ( & ' w ( ) ) : FnMut ( & ' w ( ) ) ,
4
+ {
5
+ }
6
+
7
+ fn main ( ) {
8
+ ice ( ) ;
9
+ }
Original file line number Diff line number Diff line change
1
+ #![ feature( type_alias_impl_trait) ]
2
+
3
+ use core:: marker:: PhantomData ;
4
+
5
+ type WithEmplacableForFn < ' a > = impl EmplacableFn + ' a ;
6
+
7
+ fn with_emplacable_for < ' a , F , R > ( mut f : F ) -> R
8
+ where
9
+ F : for < ' b > FnMut ( Emplacable < WithEmplacableForFn < ' b > > ) -> R ,
10
+ {
11
+ fn with_emplacable_for_inner < ' a , R > (
12
+ _: & ' a ( ) ,
13
+ _: & mut dyn FnMut ( Emplacable < WithEmplacableForFn < ' a > > ) -> R ,
14
+ ) -> R {
15
+ fn _constrain ( _: & mut ( ) ) -> WithEmplacableForFn < ' _ > {
16
+ ( )
17
+ }
18
+ loop { }
19
+ }
20
+
21
+ with_emplacable_for_inner ( & ( ) , & mut f)
22
+ }
23
+
24
+ trait EmplacableFn { }
25
+
26
+ impl EmplacableFn for ( ) { }
27
+
28
+ struct Emplacable < F >
29
+ where
30
+ F : EmplacableFn ,
31
+ {
32
+ phantom : PhantomData < F > ,
33
+ }
34
+
35
+ fn main ( ) {
36
+ with_emplacable_for ( |_| { } ) ;
37
+ }
38
+
You can’t perform that action at this time.
0 commit comments