| The Unsize trait should not be implemented directly. All implementations of | |
| Unsize are provided automatically by the compiler. | |
| Erroneous code example: | |
| ```compile_fail,E0328 | |
| #![feature(unsize)] | |
| use std::marker::Unsize; | |
| pub struct MyType; | |
| impl<T> Unsize<T> for MyType {} | |
| ``` | |
| If you are defining your own smart pointer type and would like to enable | |
| conversion from a sized to an unsized type with the | |
| [DST coercion system][RFC 982], use [`CoerceUnsized`] instead. | |
| ``` | |
| #![feature(coerce_unsized)] | |
| use std::ops::CoerceUnsized; | |
| pub struct MyType<T: ?Sized> { | |
| field_with_unsized_type: T, | |
| } | |
| impl<T, U> CoerceUnsized<MyType<U>> for MyType<T> | |
| where T: CoerceUnsized<U> {} | |
| ``` | |
| [RFC 982]: https://github.com/rust-lang/rfcs/blob/master/text/0982-dst-coercion.md | |
| [`CoerceUnsized`]: https://doc.rust-lang.org/std/ops/trait.CoerceUnsized.html |