Andrei Alexandrescu wrote:
Georg Wrede wrote:
Andrei Alexandrescu wrote:
Consider:

uint fun();
int gun();
...
int[] a = new int[5];
a[fun] = gun;

Which should be evaluated first, fun() or gun()?

arra[i] = arrb[i++];

arra[i++] = arrb[i];

I'm not sure that such dependences are good code.

By stating a definite order between lvalue and rvalue, you would actually encourage this kind of code.

By not stating it, I introduce a gratuitous nonportability.

If the programmer has introduced dependencies on the evaluation order, yes. But if he hasn't, then it will not introduce anything.

With

  a[fun] = gun;

a rewrite

  auto f = a[fun];
  a[f] = gun;

makes it explicit how the programmer wants it done. It also removes any uncertainty (and need to remember an arbitrary rule) for other people.

If you'd really want things easy for Walter, unambiguous, and clear for the reader, then you'd advocate forbidding expressions in lvalues.

Reply via email to