
-----Original Message----- From: boost-bounces@lists.boost.org [mailto:boost-bounces@lists.boost.org] On Behalf Of Artyom Sent: Saturday, April 16, 2011 2:32 PM To: boost@lists.boost.org Subject: Re: [boost] [locale] Strange(?) result in example code
std::cout.imbue(std::locale()); // Now global locale imbued to stream as
well.
LOL, DUH! OK. Thanks.
Well join the club - I've fallen into this pit recently :-(
Am I correct in thinking that the reason is that std::cout is constructed *before* the new locale is 'globalled'?
Yes.
And so std::cerr needs imbuing too but that fstream and stringstreams constructed after the std::locale::global("en_US.UTF-8") statement will get the new locale?
Yes, basically if you want to do it fully for standard library and boost:
std::locale::global(loc); std::cout.imbue(loc); std::cin.imbue(loc); std::cerr.imbue(loc); std::clog.imbue(loc);
std::wcout.imbue(loc); std::wcin.imbue(loc); std::wcerr.imbue(loc); std::wclog.imbue(loc);
// this is for boost filesystem boost::filesystem::path::imbue(loc);
Thanks for this confirmation. This seems such an obviously attractive pit, I am sure Noah and I won't be the last to fall in it ;-) I think Boost.Locale docs would be a good place to remind users of locale of its existence, including a reference to 27.4.2.3/4 of C++03. Would you like to add it as a [warning ....] while you are crossing the 't's and dotting the 'i's ? Thanks Paul --- Paul A. Bristow, Prizet Farmhouse, Kendal LA8 8AB UK +44 1539 561830 07714330204 pbristow@hetp.u-net.com