I ran `cargo build` with some code that did not compile due to a type mismatch, error E0308. Help text was displayed, which was false/very misleading. Here's a reduced test case: ``` fn foo(b: &[u16]) {} fn main() { let a: Vec<u8> = Vec::new(); foo(&a); } ``` After running `cargo build`, the error displayed was: ``` Compiling test-compile v0.1.0 (file:///home/isaac/prog/rust/test-compile) error[E0308]: mismatched types --> src/main.rs:5:9 | 5 | foo(&a); | ^^ expected slice, found struct `std::vec::Vec` | = note: expected type `&[u16]` found type `&std::vec::Vec<u8>` = help: here are some functions which might fulfill your needs: - .as_slice() error: aborting due to previous error(s) error: Could not compile `test-compile`. ``` Focusing in on the line: expected slice, found struct `std::vec::Vec` This is incorrect, because `std::vec::Vec` dereferences into slice. The actual type mismatch, which should have been displayed, is between `u16` and `u8`. I would expect the error to say: expected `u16`, found `u8` ## Meta: I discovered this on nightly, but reproduced it on stable. `rustc --version --verbose`: rustc 1.19.0 (0ade33941 2017-07-17) binary: rustc commit-hash: 0ade339411587887bf01bcfa2e9ae4414c8900d4 commit-date: 2017-07-17 host: x86_64-unknown-linux-gnu release: 1.19.0 LLVM version: 4.0