Un iterador no es solo una referencia a los datos. Debe saber cómo incrementar, etc.
Para admitir el acceso aleatorio, las implementaciones tendrán una matriz dinámica de punteros a los fragmentos. El iterador deque apuntará a esta matriz dinámica. Cuando el deque crece, es posible que sea necesario asignar un nuevo fragmento. La matriz dinámica crecerá, invalidando sus iteradores y, en consecuencia, los iteradores de deque.
No es que los trozos se reasignen, pero la matriz de punteros a estos trozos puede ser. De hecho, como señaló Johannes Schaub, las referencias no se invalidan.
También tenga en cuenta que las garantías del iterador de deque no son menores que las del vector, que también se invalidan cuando el contenedor crece.
iirc, la implementación de deque de gcc mantiene una serie de punteros a esos bloques ... Si la matriz necesita ser reasignada, los iteradores pueden volverse inválidos. Tal vez esa es la razón? No estoy seguro ... Eso al menos explica por qué las inserciones en cualquiera de los extremos invalidan los iteradores, pero no las referencias/punteros a los elementos. –