> NaN is a very special floating point value. Comparing a float with NaN gives > always false, so testing for NaN does not work as may be expected.
Also .. beware template optimizations and rewriting (in any language ...); Quite a bit of code/template implementations assume "x <= y" can be rewritten "not x > y", but that is not true if either x or y are NaN.