Недавно в интервью был задан следующий объективный вопрос.
int a = 0;
cout << a++ << a;
Ответы:
а. 10 
б. 01 
с. undefined поведение
Я ответил на выбор b, т.е. выход был бы "01".
Но, к моему удивлению, позже мне сказал интервьюер, что правильным ответом является вариант c: undefined.
Теперь я знаю понятие точек последовательности в С++. Поведение undefined для следующего утверждения:
int i = 0;
i += i++ + i++;
 но согласно моему пониманию для выражения cout << a++ << a, ostream.operator<<() будет вызываться дважды, сначала с ostream.operator<<(a++) и позже ostream.operator<<(a).
Я также проверил результат на компиляторе VS2010, и его вывод также "01".