File tree Expand file tree Collapse file tree 2 files changed +68
-0
lines changed
src/test/ui/generic-associated-types Expand file tree Collapse file tree 2 files changed +68
-0
lines changed Original file line number Diff line number Diff line change 1+ #![ feature( generic_associated_types) ]
2+
3+ use std:: fmt:: Debug ;
4+ use std:: marker:: PhantomData ;
5+
6+ #[ derive( Debug ) ]
7+ pub struct TransactionImpl < ' db > {
8+ _marker : PhantomData < & ' db ( ) > ,
9+ }
10+
11+ #[ derive( Debug ) ]
12+ pub struct CursorImpl < ' txn > {
13+ _marker : PhantomData < & ' txn ( ) > ,
14+ }
15+
16+ pub trait Cursor < ' txn > { }
17+
18+ pub trait Transaction < ' db > : Send + Sync + Debug + Sized {
19+ type Cursor < ' tx > : Cursor < ' tx >
20+ where
21+ ' db : ' tx ,
22+ Self : ' tx ;
23+
24+ fn cursor < ' tx > ( & ' tx self ) -> Result < Self :: Cursor < ' tx > , ( ) >
25+ where
26+ ' db : ' tx ;
27+ }
28+
29+ impl < ' tx > Cursor < ' tx > for CursorImpl < ' tx > { }
30+
31+ impl < ' db > Transaction < ' db > for TransactionImpl < ' db > {
32+ type Cursor < ' tx > = CursorImpl < ' tx > ; //~ ERROR lifetime bound not satisfied
33+
34+ fn cursor < ' tx > ( & ' tx self ) -> Result < Self :: Cursor < ' tx > , ( ) >
35+ where
36+ ' db : ' tx ,
37+ {
38+ loop { }
39+ }
40+ }
41+
42+ fn main ( ) { }
Original file line number Diff line number Diff line change 1+ error[E0478]: lifetime bound not satisfied
2+ --> $DIR/issue-91883.rs:32:24
3+ |
4+ LL | / type Cursor<'tx>: Cursor<'tx>
5+ LL | | where
6+ LL | | 'db: 'tx,
7+ LL | | Self: 'tx;
8+ | |__________________- definition of `Cursor` from trait
9+ ...
10+ LL | type Cursor<'tx> = CursorImpl<'tx>;
11+ | ^^^^^^^^^^^^^^^- help: try copying these clauses from the trait: `where 'db: 'tx, Self: 'tx`
12+ |
13+ note: lifetime parameter instantiated with the lifetime `'db` as defined here
14+ --> $DIR/issue-91883.rs:31:6
15+ |
16+ LL | impl<'db> Transaction<'db> for TransactionImpl<'db> {
17+ | ^^^
18+ note: but lifetime parameter must outlive the lifetime `'tx` as defined here
19+ --> $DIR/issue-91883.rs:32:17
20+ |
21+ LL | type Cursor<'tx> = CursorImpl<'tx>;
22+ | ^^^
23+
24+ error: aborting due to previous error
25+
26+ For more information about this error, try `rustc --explain E0478`.
You can’t perform that action at this time.
0 commit comments