
Johan RĂ¥de wrote:
3. Formatting always succeeds.
Hmmm - formatting a NaN results in something like "+inf". Personally, I wouldn't characterize that as a success. <snip>
This makes it difficult to implement strict_num_put. What should it do when validation fails? It can not set the failbit of the stream. The only thing it can do, is to throw an exception. The stream will catch that exception and set the badbit! At least with VC++ 7.1.
Its better than nothing. Personally I would be fine with this.
Why? The stream probably assumes that formatting facets do not throw exceptions, so it concludes that the exception was thrown by the stream buffer. When the stream buffer is corrupted, the stream sets the badbit.
However, setting the badbit when data validation fails, is a bad idea.
How come?
Suggested solution: Throw out the facets strict_num_put and strict_num_get.
Comments?
You've already investigated the issue more than I have so I'm happy to defer to your judgement. On the other hand, the attempt to serialize a NaN is an indication of a broken program I would like to see it trapable. On the other hand, it seems that I'm the only one who thinks this. Oh well.
The documentation of the library has been updated to reflect this problem.
thanks for taking this on. Robert Ramey