// check-pass #![allow(type_alias_bounds)] // pretty-expanded FIXME #23616 use std::marker::PhantomData; pub struct Handle(T, I); impl Handle { pub fn get_info(&self) -> &I { let Handle(_, ref info) = *self; info } } pub struct BufferHandle { raw: RawBufferHandle, _marker: PhantomData, } impl BufferHandle { pub fn get_info(&self) -> &String { self.raw.get_info() } } pub type RawBufferHandle = Handle<::Buffer, String>; pub trait Device { type Buffer; } fn main() {}