Thanks for the answers!

> > Why? Won't the following work?
> > 
> > void setNaN(float &v) {
> >   union { float f; int i; } t;
> >   t.i = 0x7f800001;
> >   v = t.f;
> > }
> >   
> As far as I know, this is guaranteed to work with GCC.  But it is not kosher
> according to language standards, so other compilers might dislike it.  On the
> other hand, other compilers are not guaranteed to optimize the call to
> "memcpy" out either.

Thinking about this setNaN trick, why is it not kosher?  It seems 
completely OK to me (too bad that I missed this "trick").

Note that my problem is not the unnecessary type-punning warning (I could 
live with that), but miscompiled code because of the too strict rule that 
GCC uses.  Maybe GCC shouldn't optimize around invalid type-punnings?

Geza

Reply via email to