Locale constructor locale(const locale& other, const locale& one, locale::category cats)
creates named locale when 'other' - named locale, but 'one' - unnamed. According to 22.1.1 p8: A locale constructed from a name string (such as "POSIX"), or from parts of two named locales, has a name; all others do not. Example: [test.cpp] #include <locale> #include <iostream> using namespace std; int main() { locale other(locale("C")); locale one(locale("en_US"), new ctype<char>()); locale loc(other, one, locale::collate); cout << "one.name() is " << one.name() << endl; cout << "other.name() is " << other.name() << endl; cout << "loc.name() is " << loc.name() << endl; return 0; } [EMAIL PROTECTED] locale_name]$ g++ test.cpp && ./a.out one.name() is * other.name() is C loc.name() is C [EMAIL PROTECTED] locale_name]$ g++ --version g++ (GCC) 4.3.0 20080428 (Red Hat 4.3.0-8) Copyright (C) 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -- Summary: Locale, constructed from named and unnamed locales, become named Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: tsyvarev at ispras dot ru http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38365