I support explicit notation for where one wants or wants to permit
parallelism.
The consequences could be quite serious if the calls in
cout << a() << " " << b() << "\n";
were executed in parallel, without `a` and `b` being designed for
parallelism, e.g. trying to update the same variable.
Explicit is good, implicit is bad. In general. ;-)
In C++98 and C++03 the non-normative examples at the start of section 5,
like
i = v[i++]; // the behavior is unspecified
… directly contradicted the normative text right above,
“Between the previous and next sequence point a scalar object shall
have its stored value modified at most once by the evaluation of an
expression.”
… which dictates undefined behavior.
I think that these examples signal an original intent different from the
normative text's wording. Just like all the C++98/C++03 examples using
`<iostream>` output and failing to include also `<ostream>`, probably
signal an original intent that `operator<<` should be provided also via
the `<iostream>` header. It is now, as of C++11 and later.
So, is the presumed original intent of /unspecified/ behavior
incompatible with your envisioned possible parallelism?
Cheers!,
- Alf