¿Es legal agregar elementos a un vector preasignado en un bucle for basado en rango sobre ese vector?

Estoy usando el compilador de Visual Studio 2015 Update 1 C ++ y este fragmento de código:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
  vector<int> v{3, 1, 4};

  v.reserve(6);

  for (auto e: v)
    v.push_back(e*e);

  for (auto e: v)
    cout << e << " ";

  return 0;
}

La versión de lanzamiento funciona bien, pero la versión de depuración producevector iterators incompatible&nbsp;mensaje de error. ¿Porqué es eso?

Antes de marcarlo como una pregunta duplicada paraAgregar elementos a un vector durante el ciclo basado en rango c ++ 11, por favor lee mi respuestahttps://stackoverflow.com/a/35467831/219153&nbsp;con argumentos en contrario.