This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: std::locale does not work here


I know, that there are different supported locale strings on Windows (e.g. "eng"), Linux/POSIX (e.g. "en_US") and so on.

Is there a way to test the locale string support? Stroustrup says in his C++ book, that there is a "runtime_error" exception thrown by the std::locale's constructor, if the locale string argument is not supported by the executing OS. But Cygwin & Debian/stable's gnu stdc++ libs do not react on unsupported locale strings...

Is there any gnu stdc++ lib port out there, that supports more than "C"?

-Patrick



Nathan Myers wrote:

On Tue, Jun 22, 2004 at 02:33:09AM +0200, Patrick Gr?bel wrote:

I am using Cygwin (g++-3.3.1) and Debian/stable (g++-3.0.1). The following call will not throw an "runtime_error" that is described in Stroustrup's C++ bible:

std::locale loc("$$???XXXYYY????!!!");

The constructor even accepts locale strings, that do not make sense. Also the following code will _not_ produce a ',' instead of a '.':

std::locale loc("de_DE");
double d = 1.76;
std::cout.imbue(loc);
std::cout << d << std::endl;

That's weird. Is g++'s stdc++ lib incompatible to the standard?


The standard says very little about what makes a useful locale name. If the implementation claims POSIX compatibility, you might reasonably expect POSIX locale names to mean something. It's all up to the documentation for your implementation, which is likely to defer to the OS. All you're guaranteed is that "C" or "POSIX" will do something not too unreasonable -- in the opinion of the implementer. It's called "quality of implementation", and lousy implementations are allowed, and hoped to be out-competed by good ones. Often, there's
not much an implementation can do if the OS doesn't help.


The implication is just that locale name strings should never be compiled in to a portable program. Get it from a config file,
environment variable, or "resource".


(Is this an FAQ?)

Nathan Myers
ncm-nospam@cantrip.org



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]