struct Foo<T: ?Sized> { f: T,} This ?Sized, read as “T may or may not be Sized”, which allows us to match both sized and unsized types