Очевидно, потому что оператор value++
(вместе с square) выполнился раньше оператора сдвига <<
, которые используются для вывода в поток cout.
Вообще, у меня оно выводит 13.
Стандарт гарантирутет, что постинкримент сработает после того, как значение пременной возьмется для вычисления выражения, а вот когда именно во время вычисления этого выражения - это уже от компилятора зависит.
Вообще, использование переменной value в том же выражении, что и она же с постинкриментом - Undefined behavior.
Мне лень искать конкретные пункты стандарта, из которых будет следовать, что это UB, но просто запомните: нельзя использовать перменную и переменную++ в одном и том же выражении.