| Home | Libraries | People | FAQ | More

### Design Rationale

- The flags are implemented as a const data member of the facet. Facets are reference counted, and locales can share facets. Therefore changing the flags of a facet would have effects that are hard to predict. An alternative design would be to implement the flags using `std::ios_base::xalloc` and `std::ios_base::iword`. Then one could safely modify the flags, and one could define manipulators that do so. However, for that to work with dynamically linked libraries, a `.cpp` file would have to be added to the library. It was judged be more desirable to have a header-only library, than to have mutable flags and manipulators.
- The facet `nonfinite_num_put` throws an exception when the `trap_infinity` or `trap_nan` flag is set and an attempt is made to format infinity or NaN. It would be better if the facet set the `fail bit` of the stream. However, facets derived from `std::num_put` do not have access to the stream state.