On Sunday, 28 December 2014 at 20:25:59 UTC, bearophile wrote:
John Colvin:
I guess there are cases where it's not easily catchable:
void foo(int* p0, int* p1)
{
(*p0)++ = (*p1)++;
}
what happens when p0 == p1?
The undefined code can be found statically, the run-time values
are irrelevant.
Bye,
bearophile
It depends what you mean by "undefined". Sure, the order of those
2 ++ operations is undefined in all cases, but it doesn't lead to
undefined *behaviour* unless the pointers are the same.
There's loads of code out there that has undefined order of
operations but is invariant w.r.t. said ordering and is therefore
correct.