3 use std::marker::Unsize;
5 pub trait CastTo<T: ?Sized>: Unsize<T> {
6 fn cast_to(&self) -> &T;
9 impl<T: ?Sized, U: ?Sized + Unsize<T>> CastTo<T> for U {
10 fn cast_to(&self) -> &T {
15 impl<T: ?Sized> Cast for T {}
17 fn cast<T: ?Sized>(&self) -> &T
25 pub trait Foo: CastTo<[i32]> {}
26 impl Foo for [i32; 0] {}
29 let x: &dyn Foo = &[];
30 let x = x.cast::<[i32]>();
31 //~^ ERROR: the trait bound `dyn Foo: CastTo<[i32]>` is not satisfied