É legal adicionar elementos a um vetor pré-alocado em um loop for baseado em intervalo sobre esse vetor?

Estou usando o compilador C ++ da Atualização 1 do Visual Studio 2015 e esse trecho 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;
}

A versão de lançamento funciona bem, mas a versão de depuração produzvector iterators incompatible mensagem de erro. Por que é que?

Antes de sinalizá-lo como uma pergunta duplicada paraAdicionar elementos a um vetor durante o loop baseado em intervalo c ++ 11leia minha respostahttps://stackoverflow.com/a/35467831/219153 com argumentos em contrário.

questionAnswers(2)

yourAnswerToTheQuestion