> 
> Hello Everyone
> 
> I noticed some thing strange recently. This code (under g++ (GCC) 3.2.3 
> 20030502 (Red Hat Linux 3.2.3-53)), provides this output with -O0 flag:
> int main(int argc, char **argv) {
>   std::cout << f1() << f2() << std::endl;
> }
> 
> 
> I'm pretty sure that I am depending on an undefined behavior here, but 
> maybe you guys would want to have a deeper look at this.


Yes are you dependening on undefined behavior.   Since there is no sequence 
point
between the calls to f1() and f2(), then they can be evaluated in either order.

> I think, if are global, it would be same as depending upon the order of 
> evaluation of arguments to a function (which would be wrong according to 
> the C++ standard), but if they were members of the stream classes, then it 
> would evaluate to a().b().c().d() and we should expect f1() to be called 
> before f2(). - Is that correct?

No because the above is equvliant to the following pesdu C code:

operator <<(operator << (operator << (std::cout, f1()), f2()), std::endl)

and the order evaluatation of expressions inside a function call is undefined.

Thanks,
Andrew Pinski


Reply via email to