On Saturday, 18 August 2012 at 14:29:12 UTC, Jesse Phillips wrote:
On Saturday, 18 August 2012 at 09:32:01 UTC, F i L wrote:

It's flawed because condition2 relies upon condition1 to function without error. The example, as Walter presented it, is logically describing:

   float f;
   if (condition1) {
       f = 7;
       if (condition2)
           f ++;
   }

This greatly changes the semantics of the code. I do not disagree that the example indicates the original programmer is likely wrong and needs to improve the description of his intent.

I agree, and that's my point here. The original example is an erroneous presupposition that leads to faulty conclusions. If the compiler warned against this error the programmer would likely fix the code to a state which prevents the potential bug this example was originally intended to illustrate.


What I disagree on is that it is that complaining that f might not be initialized will force the programmer to think and address the true issue. It is also taking the example at face value. The complexity of the relationship could be harder too see (I don't know what that would be),

I too, don't know of any examples where defaulting to NaN would prevent an error where static analysis would not, though I'm always open to argument. Given the benefits of static analysis and defaulting to 0.0f for class members (which I listed in previous posts), I see that position as the one with demonstrable benefit.


and somewhere else where condition1 is set there could be code:

auto condition1 = getmevalue();
enforce(condition1 && condition2, "Huston this is the problem!");

I don't see how this changes the situation with NaN vs. static analysis.

Reply via email to