
OTOH, since the first release I've felt the weakest elements of the library have been the handling of local times and i/o. It took a long time for me to see 'the light' on i/o. The first implementations of streaming facets were just too clunky and were too hard for users to use and extend. And the bottom line is that every project/person/standard has their own format for date-time i/o -- it's impossible to standardize what users want here. Luckily last summer Martin Andrian showed me the light with a partial implementation of a 'format string' based i/o facet (basically you can write: date_facet->format("%Y-%b-%d") to reset the format of a date in a stream). This approach solved a long standing issue on my standardization todo list --> how does i/o fit in with the existing format string concepts in the standard lib. Not to mention that it is almost infinately flexible in terms of how the various types can be streamed. This code will be the standard i/o facet in the 1.33 release.
Jeff, do you mind if I throw a wildcard in here? Why not drop facets altogether and use a stream format manipulator instead: std::cout << set_date_format("%Y-%b-%d") << mydate << std::endl; The format would be stored in the iostreams iword/pword (that's what they're for). You could still have a facet if you really wanted uses to change the *algorithm* used for io, but I guess what I'm trying to say is that: algorithms go in facets. configuration data goes in the iostream object itself. Just my 2c worth, Hope this doesn't cloud things up to much! John.