-
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.