Por qué los cierres de iterador anidados no copiarán valores del ámbito externo

Estoy tratando de usar iteradores anidados, donde el iterador interno usa el valor del iterador externo.

vec![0;10].iter().flat_map(|&a| {
    (0..10).map(|b|{
        a + b
    })
});

error:a no vive lo suficiente

    (0..10).map(|b|{
                ^^^

nota: la referencia debe ser válida para la llamada al método ...

Esto se compila si muevo el cierre interno (move |b|{), pero no entiendo por qué es necesario, dado quea es un número entero y podría haberse copiado en lugar de haberse movido.

Respuestas a la pregunta(1)

Su respuesta a la pregunta