1 #![feature(generic_associated_types)]
4 type Cursor<'a>: DocCursor<'a>;
6 fn cursor(&self) -> Self::Cursor<'_>;
11 impl Document for DocumentImpl {
12 type Cursor<'a> = DocCursorImpl<'a>;
14 fn cursor(&self) -> Self::Cursor<'_> {
22 trait DocCursor<'a> {}
24 struct DocCursorImpl<'a> {
25 document: &'a DocumentImpl,
28 impl<'a> DocCursor<'a> for DocCursorImpl<'a> {}
30 struct Lexer<'d, Cursor>
32 Cursor: DocCursor<'d>,
35 _phantom: std::marker::PhantomData<&'d ()>,
39 impl<'d, Cursor> Lexer<'d, Cursor>
41 Cursor: DocCursor<'d>,
43 pub fn from<Doc>(document: &'d Doc) -> Lexer<'d, Cursor>
45 Doc: Document<Cursor<'d> = Cursor>,
48 cursor: document.cursor(),
49 _phantom: std::marker::PhantomData,
54 fn create_doc() -> impl Document<Cursor<'_> = DocCursorImpl<'_>> {
55 //~^ ERROR: missing lifetime specifier
60 let doc = create_doc();
61 let lexer: Lexer<'_, DocCursorImpl<'_>> = Lexer::from(&doc);