Skip to content

Commit 1ef760d

Browse files
committed
Add test for issue #70303
1 parent 25cb1af commit 1ef760d

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// check-pass
2+
3+
#![allow(incomplete_features)]
4+
#![feature(generic_associated_types)]
5+
6+
trait Document {
7+
type Cursor<'a>: DocCursor<'a>;
8+
9+
fn cursor(&self) -> Self::Cursor<'_>;
10+
}
11+
12+
struct DocumentImpl {}
13+
14+
impl Document for DocumentImpl {
15+
type Cursor<'a> = DocCursorImpl<'a>;
16+
17+
fn cursor(&self) -> Self::Cursor<'_> {
18+
DocCursorImpl {
19+
document: &self,
20+
}
21+
}
22+
}
23+
24+
25+
trait DocCursor<'a> {}
26+
27+
struct DocCursorImpl<'a> {
28+
document: &'a DocumentImpl,
29+
}
30+
31+
impl<'a> DocCursor<'a> for DocCursorImpl<'a> {}
32+
33+
struct Lexer<'d, Cursor>
34+
where
35+
Cursor: DocCursor<'d>,
36+
{
37+
cursor: Cursor,
38+
_phantom: std::marker::PhantomData<&'d ()>,
39+
}
40+
41+
42+
impl<'d, Cursor> Lexer<'d, Cursor>
43+
where
44+
Cursor: DocCursor<'d>,
45+
{
46+
pub fn from<Doc>(document: &'d Doc) -> Lexer<'d, Cursor>
47+
where
48+
Doc: Document<Cursor<'d> = Cursor>,
49+
{
50+
Lexer {
51+
cursor: document.cursor(),
52+
_phantom: std::marker::PhantomData,
53+
}
54+
}
55+
}
56+
57+
pub fn main() {
58+
let doc = DocumentImpl {};
59+
let lexer: Lexer<'_, DocCursorImpl<'_>> = Lexer::from(&doc);
60+
}

0 commit comments

Comments
 (0)