Bug de compilação em C ++?

Eu tenho o seguinte código:

#include <iostream>
#include <complex>
using namespace std;

int main() {
    complex<int> delta;
    complex<int> mc[4] = {0};

    for(int di = 0; di < 4; di++, delta = mc[di]) {
        cout << di << endl;
    }

    return 0;
}

Espero que produza "0, 1, 2, 3" e pare, mas gera uma série interminável de "0, 1, 2, 3, 4, 5, ....."

Parece que a comparaçãodi<4 não funciona bem e sempre retorna verdadeiro.

Se eu apenas comentar,delta=mc[di], Recebo "0, 1, 2, 3" normalmente. Qual é o problema com a atribuição inocente?

estou usandoIdeone.com g ++ C ++ 14 com a opção -O2.

questionAnswers(4)

yourAnswerToTheQuestion