Why is a = i + i++ undefined and not unspecified behaviour
<p>I read through several very good answers about undefined behaviour and sequence points (e.g. <a href="http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points">Undefined Behavior and Sequence Points</a>) and I understand, that </p>

<pre><code>   int i = 1;
   a = i + i++; //this is undefined behaviour
</code></pre>

<p>is undefined code, according to the C++ standard. But what is the deeper reasoning behind it being undefined behaviour? Wouldn't it be enough to make it unspecified behaviour? 
The normal argument is, that by having few sequence points, C++ compilers can optimize better for different architectures, but wouldn't leaving it unspecified allow those optimizations as well? In</p>

<pre><code>   a = foo(bar(1), bar(2)); //this is unspecified behaviour
</code></pre>

<p>the compiler can also optimize, and it is not undefined behaviour. In the first example it seems clear, that a is either 2 or 3, so the semantics seems to be clear to me. I hope there is a reasoning, why some things are unspecified, and others are undefined.</p>
