Дело в том, что между точками следования (это точка с запятой, вызов функции и экономные операции &&, || и ?:) компилятор имеет право переставлять операции как хочет. Вот он и решил вычислять c++ с конца.
В C++11 нет точек следования, есть «вычисляется прежде», но языка это кардинально не меняет.
В C++17 это обещают поправить.
19) In a shift operator expression
E1<<E2
and
E1>>E2
, every value computation and side-effect of E1 is sequenced before every value computation and side effect of E2
en.cppreference.com/w/cpp/language/eval_order
ЗЫ. MinGW даже предупреждение выводит, что результат такой строчки явно не определён. И на классе Co тоже (см. флейм с Толстым Лорри).