Re: std::locale ctor fails (L10n with C++)
On 29 mar, 19:21, Sashi Asokarajan <sa...@gmx.de> wrote:
recently I stepped over Strotrup's TC++PL (third ed.) Chapter D.1
where the localization support of the C++ stdlib is explained.
[http://www.research.att.com/~bs/3rd_loc.pdf]
Unfortunately the constructor fails if I try to instantiate
std::locale for locales other than C or POSIX.
Are they installed correctly? There's no guarantee that other
locales are available. (For that matter, there's no guarantee
that POSIX locale is available unless you're on a Posix system.)
With (only)
LANG="de.DE.UTF-8" set in ENV the following code thows an
exception: std::locale loc("");
and std::setlocale(LC_ALL, ""); works fine?!
My GCC Version is "gcc (GCC) 3.4.6 [FreeBSD] 20060305" and I'm
using FreeBSD 6.2.
Here's my example code:
#include <clocale>
#include <iostream>
int main()
{
using std::cout;
using std::endl;
const char* const lstr = std::setlocale(LC_ALL, "");
if (lstr)
cout << "lstr=" << lstr << endl;
else
cout << "lstr=NULL" << endl;
std::locale loc("");
cout << "std::locale loc=" << loc.name() << endl;
}
Output:
lstr=de_DE.UTF-8
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
Abort (core dumped)
Does anyone have similar problems ? What am I doing wrong ?
Is the libstdc++ incomplete on my platform?
I *think* that the libstdc++ bases itself on the installed
system locales, but I'm not at all sure how. Under SuSE Linux,
with g++ 4.2.1, if I set LANG to "de_DE.UTF-8", it works for me.
(Note that it didn't work with older versions of g++. I don't
know when it started working, however, although I thought it was
before 4.0. Maybe all you need to do is upgrade.)
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34