------- Comment #5 from rguenth at gcc dot gnu dot org 2010-08-28 11:40 ------- Note that internally there is no such thing as an operator|= for fundamental types, but things are treated like in C. If you were in C,
sz.b |= f (&sz, &sz, &sz, 3); there is no sequence point before |= as it's not a function call - and I am not sure your reading of C++ is correct that there is a function call to operator|= and thus a sequence point before it. In fact 5.17/7 says that E1 op= E2 is equal to E1 = E1 op E2 except that E1 is evaluated only once. I can confirm though that EDG returns 1 for your example (which by our reading would be an as valid result). -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45437