
Sorry for this late answer, I've just got back from vacation. Paul A Bristow wrote: [...]
If you have an array of 'fallible' data (measurements say), not all of which are valid, you can use doubles for the data, but you need an extra byte for each value to hold the valid/not valid bit - a bool in a byte, or more perhaps.
If you manage to persuade the compiler to pack the doubles and bytes together, the double won't be on speed-friendly boundaries,
or if you don't/can't pack each byte, the bool may end up taking as much space as the double.
So for a few items, fallible is fine, but for hundreds and up, has a downside.
A NaN by contrast is neatly stored in the double, and costs nothing extra, and MAY be used to indicate 'fallibility'.
But don't let this make you too tired to continue - there are other cases when fallible may be very useful.
One solution to this problem is to supplement fallible<T> with a trait indicating whether an in-range invalid value is available and its value (an even more obvious example than NaN's is fallible<T *>). Cheers, Nicola Musatti