`Vec<i32>` or `vec::IntoIter<i32>` being a subtype of `impl Iterator<Item=i32>` would imply that you could take have a vec of type `Vec<impl Iterator<Item=i32>>` and have many structs of different types stuffed in, that all implement `Iterator<Item=i32>`. You can't do that, ergo, it's not a subtype.