Потому, что это типичный пример "неопределённого поведения". Стандарт не определяет последовательность, в которой будут вычислены части выражения. Потому код, генерируемый компилятором, может вычислять части выражения в любом порядке - независимо от того, как выражение записано в исходном коде. В твоём случае имеется ОДНО выражение, содержащее три операции << и три операции ++.Операции << код, генерируемый компилятором, выполнит строго слева направо. А вот операции ++ будут выполнены в том порядке, который компилятор сочтёт оптимальным. P.S. Хорошим тоном являет НЕ использовать повторно в том же выражении переменную, к которой применены операции ++ или --.