| A cast between a thin and a wide pointer was attempted. | |
| Erroneous code example: | |
| ```compile_fail,E0607 | |
| let v = core::ptr::null::<u8>(); | |
| v as *const [u8]; | |
| ``` | |
| First: what are thin and wide pointers? | |
| Thin pointers are "simple" pointers: they are purely a reference to a memory | |
| address. | |
| Wide pointers are pointers referencing Dynamically Sized Types (also called | |
| DSTs). DSTs don't have a statically known size, therefore they can only exist | |
| behind some kind of pointer that contains additional information. For example, | |
| slices and trait objects are DSTs. In the case of slices, the additional | |
| information the wide pointer holds is their size. | |
| To fix this error, don't try to cast directly between thin and wide pointers. | |
| For more information about type casts, take a look at the section of the | |
| [The Rust Reference][1] on type cast expressions. | |
| [1]: https://doc.rust-lang.org/reference/expressions/operator-expr.html#type-cast-expressions |