Credo che la cosa dipenda da compilatore a compilatore.
Sotto Windows (con Dev-Cpp) ottengo questo risultato:
codice:
0 0 1
0 1 1
Che che che?????
0 0 1
0 1 1
Ora va gia' meglio..
Mentre sotto Linux ottengo questo:
codice:
1 0 0
1 1 0
Che che che?????
0 0 1
0 1 1
Ora va gia' meglio..
Apparentemente sembrerebbe più corretto il risultato ottenuto sotto Windows, ma se si va a vedere la regola di valutazione delle espressioni risulta corretto il risultato Linux (quello che hai postato tu, io non lo ottengo...): le espressioni sono sempre valutate da destra a sinistra.

Quindi la prima istruzione:
codice:
   cout << i << " " <<  i++ << " " << i << endl;
Viene valutata in questo ordine:
codice:
   cout << i << " " <<  i++ << " " << i << endl;
   cout << i << " " <<  i++ << " " << 0 << endl;
   cout << i << " " <<  i++ << " " << 0 << endl;
   cout << i << " " <<  0 << " " << 0 << endl;
   cout << i << " " <<  0 << " " << 0 << endl;
   cout << 1 << " " <<  0 << " " << 0 << endl;
Con il risultato seguente:
codice:
1 0 0
Ciao.