Resultados incorrectos cuando se agrega el vector a sí mismo usando copy y back_inserter [duplicate]

Esta pregunta ya tiene una respuesta aquí:

Buena manera de anexar un vector a sí mismo 4 respuestas

Inspirado poresta pregunta, preguntando cómo agregarse un vector a sí mismo, mi primer pensamiento fue el siguiente (y sí, me doy cuentainsert es una mejor opción ahora):

#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>

int main() {
    std::vector<int> vec {1, 2, 3};
    std::copy (std::begin (vec), std::end (vec), std::back_inserter (vec));

    for (const auto &v : vec)
        std::cout << v << ' ';
}

Sin embargo, esto imprime:

1 2 3 1 * 3

El * es un número diferente cada vez que se ejecuta el programa. El hecho de que solo se reemplacen los 2 es peculiar, y si realmente hay una explicación para eso, me interesaría escucharlo. Continuando, si agrego a un vector diferente (una copia del original), se imprime correctamente. También sale correctamente si agrego la siguiente línea antes decopy uno:

vec.reserve (2 * vec.size());

estaba bajo la impresionstd::back_inserter era una forma segura de agregar elementos al final de un contenedor, a pesar de no reservar memoria de antemano. Si mi entendimiento es correcto, ¿qué hay de malo con la línea de copia?

Supongo que no tiene nada que ver con el compilador, pero estoy usando GCC 4.7.1.

Respuestas a la pregunta(1)

Su respuesta a la pregunta