real x;
should *not* generate an exception. An exception should only be generated if x is actually used. But the compiler is incorrectly inserting a load instruction when it initializes the variable. This is a compiler bug, and it's my fault, I've never got around to fixing it. It makes the feature practically useless at the moment. The funny thing is that Intel processors do not generate exceptions when they load 80-bit signalling NaNs, but AMD processors do, so the bug doesn't always have an effect. (I don't think the difference between the processors is intentional, I think AMD just didn't read Intel's docs carefully enough). Both processors will generate an exception as soon as you do an operation on a signalling NaN.