$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Martin (adrianm_at_[hidden])
Date: 2005-06-23 08:06:30
1. The date_time library in the currenct CVS doesn't follow the standard
formatted input/output requirements in the C++ standard.
e.g.
stringstream s("205-Jan-01");
date d;
s >> d;
will throw "Year out of valid range" exception instead of just setting the
badbit.
The resolution is to use the sentry object and catch exceptions:
template <class charT, class traits>
inline std::basic_istream<charT, traits>&
operator>>(std::basic_istream<charT, traits>& is, date& d) {
std::basic_istream<charT, traits>::sentry cerberos(is, false);
if (cerberos) {
std::ios_base::iostate status = std::ios_base::iostate
(std::ios_base::goodbit);
try {
... //use facet and set status if failed
}
catch (...) {
is.setstate(std::ios_base::badbit);
}
if (status)
is.setstate(status);
}
return is
}
---------------
2. The default date format is "%Y-%b-%d" which is very confusing since it is
using a date order that is not common in english speaking countries while it
uses english month names.
The default format should be "%x".
(I know this will create problems with input parsing on some STL libraries but
I think it is a better than the current solution where almost nobody can use
the default).
---------------
3. The streaming functions all add a new facet to the locale if no current
facet has been imbued. Wouldn't it be better to either have a
singleton "default" facet for all streams or imbue the facet to the global
locale instead?