loop interno com o mesmo nome de variável que o loop externo

assumindo o seguinte código simples:

for(int i=0; i < 1000; i++)
{
  cout << "Outer i: " << i << endl;
  for(int i=0; i < 12; i++)
  {
    cout << "Inner i:" << i << endl;
  }
}

Funciona muito bem. O mesmo nome de variável nos dois loops usados ​​e a saída está bem.

Eu entendi direito que ambas as variáveis ​​são criadas na pilha, e quando o loop externo vem para o novo loop interno, um novo "namespace" (talvez o nome errado ..) é criado? Mas por que é sobrescrito? Se eu escolher outro nome para a variável em loop interno, também posso acessar oi do loop externo.

Estou um pouco confuso.

questionAnswers(2)

yourAnswerToTheQuestion