How best to deal with warning c4305 when type could change?
        Posted  
        
            by identitycrisisuk
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by identitycrisisuk
        
        
        
        Published on 2010-05-25T11:35:57Z
        Indexed on 
            2010/05/25
            12:01 UTC
        
        
        Read the original article
        Hit count: 305
        
I'm using both Ogre and NxOgre, which both have a Real typedef that is either float or double depending on a compiler flag. This has resulted in most of our compiler warnings now being:
warning C4305: 'argument' : truncation from 'double' to 'Ogre::Real'
When initialising variables with 0.1 for example. Normally I would use 0.1f but then if you change the compiler flag to double precision then you would get the reverse warning. I guess it's probably best to pick one and stick with it but I'd like to write these in a way that would work for either configuration if possible.
One fix would be to use #pragma warning (disable : 4305) in files where it occurs, I don't know if there are any other more complex problems that can be hidden by not having this warning. I understand I would push and pop these in header files too so that they don't end up spreading across code.
Another is to create some macro based on the accuracy compiler flag like:
#if OGRE_DOUBLE_PRECISION
    #define INIT_REAL(x) (x)
#else
    #define INIT_REAL(x) static_cast<float>( x )
#endif
which would require changing all the variable initialisation done so far but at least it would be future proof.
Any preferences or something I haven't thought of?
© Stack Overflow or respective owner