https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83028
Matthijs van Duin <matthijsvanduin at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |matthijsvanduin at gmail dot
com
--- Comment #1 from Matthijs van Duin <matthijsvanduin at gmail dot com> ---
There are many such cases which are well-defined in C++17 yet trigger a
sequence-point warning in g++ 8.2, such as:
(x+i)[i++]
i = i++
(funcs[i++])(i)
This incorrect behaviour is actually documented: "The C++17 standard will
define the order of evaluation of operands in more cases: in particular it
requires that the right-hand side of an assignment be evaluated before the
left-hand side, so the above examples are no longer undefined. But this warning
will still warn about them, to help people avoid writing code that is undefined
in C and earlier revisions of C++."
This reasoning here is of course complete garbage. Plenty of valid C++17 code
is invalid in earlier revisions of the standard. When compiling code with
-std=c++17 or -std=gnu++17, the compiler should only concern itself with
whether the code is valid C++17 code.
Since I think habitually ignoring warnings is very bad practice and compile
with -Werror to ensure this won't happen, I consider these warnings to be
nearly as bad as miscompilation, as the end result is the same: I still cannot
rely on this feature of the C++17 standard.