close 278081 thanks Daniel Jacobowitz wrote:
>On Sun, Oct 24, 2004 at 01:42:02PM -0500, Adam Majer wrote: > > >>You can rearrange -X+Y, as well as -X()+Y or -X+Y(), but you cannot do >>this for -X()+Y() unless you can guarantee that X() doesn't depend on >>Y() and vice-versa. >> >> > >Could you quote standard chapter and verse for this? I believe you are >incorrect. While the function calls are sequence points, they are not >defined to happen in any particular order. > >>From ISO C 6.5#3: > [#3] The grouping of operators and operands is indicated by > the syntax. Except as specified later (for the function- > call (), &&, ||, ?:, and comma operators), the order of > evaluation of subexpressions and the order in which side > effects take place are both unspecified. > >I don't have ISO C++ handy but I believe it is worded similarly. > > Well, upstream already marked the bug as "INVALID RESOLVED"... Anyway, I do remember that the precedence occurs as in order (for above example) unary - + - I would expect X() and Y() to be undetermined until actually evaluated. That is, -X()+Y() -x+Y(), where x=evaluated X() x'+Y(), where x' = -x x'+y, where y=evaluated Y() According to upstream (and ISO C), -X()+Y() can be evaluated as, -X()+Y() -X()+y -x+y x'+y This essentially means that precedence is not followed if Y depends on X or vice-versa. Blah.... Now I have to go and rewrite some code... - Adam -- Building your applications one byte at a time http://www.galacticasoftware.com