>>653
Iteratorではなく他の言語のようにコストを払ってVec(のVec)で返したいならば
以下のように2段階それぞれcollect()するだけなのでコードが本質的に変わるわけではない

fn subsets<T>(input: &[T]) -> Vec<Vec<&T>> {
let len = input.len();
(0..(1 << len))
.map(move |bits| (0..len)
.filter(|index| bits & (1 << index) != 0)
.map(|index| &input[index])
.collect())
.collect()
}

そしてあなたもcollect()して返すのはイマイチだと>>605で明言しているのだから
今回の結論はどちらもcollect()せずにイテレータのイテレータとなる>>632のコードが正解