1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
pub trait Foo { type Associated; } pub struct X; pub struct Y; impl Foo for X { type Associated = (); } impl Foo for Y { type Associated = (); } impl X { pub fn returns_sized<'a>(&'a self) -> impl Foo<Associated=()> + 'a { X } } impl Y { pub fn returns_unsized<'a>(&'a self) -> Box<impl ?Sized + Foo<Associated=()> + 'a> { Box::new(X) } }