// check-pass #![feature(generic_associated_types)] use std::marker::PhantomData; pub trait Type { type Ref<'a>; } pub trait AsBytes {} impl AsBytes for &str {} pub struct Utf8; impl Type for Utf8 { type Ref<'a> = &'a str; } pub struct Bytes { _marker: PhantomData, } impl Bytes where for<'a> T::Ref<'a>: AsBytes, { pub fn new() -> Self { Self { _marker: PhantomData, } } } fn main() { let _b = Bytes::::new(); }