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.