I think that [`ExactSizeIterator`](http://doc.rust-lang.org/nightly/std/iter/trait.ExactSizeIterator.html) should be an `unsafe` trait, so that its invariant can be relied upon by `unsafe` code. See also https://github.com/rust-lang/rfcs/pull/956 and http://internals.rust-lang.org/t/the-trusted-iterator-length-problem/1302