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

If violations could be checked such that invalid code is rejected, your solution would work.

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.

I think that would be too restrictive. a[b] is already an expression.

I guessed you'd say that. But I thought it'd be condescending to explain that the compiler should notice a leaf expression.

The solution is simple: define an order of evaluation such that even bad code behaves consistently.

Then pick lexical order. For consistency, that's what statement.html has all over the place anyway.

Reply via email to