On 12/23/2013 4:12 PM, Charles Hixson wrote:
On 12/23/2013 12:39 PM, David Held wrote:
[...]
int mightUpdate(int& x)
{
    ...
    return x;
}

{
    ...
    a[mightUpdate(i)] = mightUpdate(i);
    ...
}

Is this also a bug?  How would the compiler know whether to emit a
diagnostic for this case?

Yes, that should be an error.  And the compiler could notice that the
function parameter values are allowed to be modified, and forbid such
use.  As it should.
[...]

Ok, let's make it more interesting...

void undefinedBehavior(int[] a, int b)
{
    int x = f(b);
    int y = g(b);
    a[mightUpdate(a[x])] = mightUpdate(a[y]);
}

Now, depending on b, f(), and g(), you might have the same as above, or you might not. Should this be illegal, or allowed?

Dave

Reply via email to