¿Por qué resize () provoca una copia, en lugar de un movimiento, del contenido de un vector cuando se excede la capacidad? [duplicar]

Esta pregunta ya tiene una respuesta aquí:

¿Cómo hacer cumplir la semántica de movimiento cuando un vector crece? 4 respuestas

Clase dadaX a continuación (las funciones de miembro especiales distintas de la definida explícitamente no son relevantes para este experimento):

struct X
{
    X() { }
    X(int) { }
    X(X const&) { std::cout << "X(X const&)" << std::endl; }
    X(X&&) { std::cout << "X(X&&)" << std::endl; }
};

El siguiente programa crea un vector de objetos de tipo.X y cambia su tamaño para que se exceda su capacidad y se obligue a la reasignación:

#include <iostream>
#include <vector>

int main()
{
    std::vector<X> v(5);
    v.resize(v.capacity() + 1);
}

Desde la claseX proporciona un constructor de movimientos, esperaría que el contenido anterior del vector fueramovido en el nuevo almacenamiento después de la reasignación. Muy sorprendentemente,ese no parece ser el caso, y la salida que obtengo es:

X(X const&)
X(X const&)
X(X const&)
X(X const&)
X(X const&)

¿Por qué?

Respuestas a la pregunta(2)

Su respuesta a la pregunta