Opened 16 years ago
Last modified 8 years ago
#15653 assigned defect
std::locale broken in gcc — at Initial Version
Reported by: | dirk@… | Owned by: | macports-tickets@… |
---|---|---|---|
Priority: | Normal | Milestone: | |
Component: | ports | Version: | 1.6.0 |
Keywords: | Cc: | ||
Port: | gcc43 |
Description
When compiling the following code:
#include <locale> #include <iostream> #include <exception> #include <clocale>
void try_c_locale(const char* locale_name) {
if( std::setlocale(LC_ALL, locale_name) == NULL )
printf("Failed to setlocale(LC_ALL, \"%s\")\n", locale_name);
else
printf("Succeeded in calling setlocale(LC_ALL, \"%s\")\n", locale_name);
}
void try_cpp_locale(const char* locale_name) {
try {
std::locale my_locale(locale_name);
} catch(std::exception& e) {
printf("Failed ctor for std::locale with \"%s\": %s\n", locale_name, e.what()); return;
}
printf("Succeeded ctor for std::locale with \"%s\"\n", locale_name);
}
int main(void) {
Some locales from "locale -a" on my OS X system, here is proof that these locales do exist on my system. Take my word for it that "locale -a" also shows these locales existing on my linux system as well. rutski@imac:~$ locale -a | tail -n 2 C POSIX rutski@imac:~$ locale -a | grep en_US en_US en_US.ISO8859-1 en_US.ISO8859-15 en_US.US-ASCII en_US.UTF-8 rutski@imac:~$ locale -a | grep pl_PL pl_PL pl_PL.ISO8859-2 pl_PL.UTF-8 rutski@imac:~$
const char* test_locales[] = {
"C", "POSIX", "en_US", "en_US.UTF-8",
"pl_PL",
"pl_PL.ISO8859-2"
};
printf("Trying c locales...\n"); for(size_t x = 0; x < sizeof(test_locales)/sizeof(char*); x++)
try_c_locale(test_locales[x]);
printf("\n");
printf("Trying C++ locales...\n"); for(size_t x = 0; x < sizeof(test_locales)/sizeof(char*); x++)
try_cpp_locale(test_locales[x]);
}
the output clearly states there is something wrong:
Trying c locales... Succeeded in calling setlocale(LC_ALL, "C") Succeeded in calling setlocale(LC_ALL, "POSIX") Succeeded in calling setlocale(LC_ALL, "en_US") Succeeded in calling setlocale(LC_ALL, "en_US.UTF-8") Succeeded in calling setlocale(LC_ALL, "pl_PL") Succeeded in calling setlocale(LC_ALL, "pl_PL.ISO8859-2")
Trying C++ locales... Succeeded ctor for std::locale with "C" Succeeded ctor for std::locale with "POSIX" Failed ctor for std::locale with "en_US": locale::facet::_S_create_c_locale name not valid Failed ctor for std::locale with "en_US.UTF-8": locale::facet::_S_create_c_locale name not valid Failed ctor for std::locale with "pl_PL": locale::facet::_S_create_c_locale name not valid Failed ctor for std::locale with "pl_PL.ISO8859-2": locale::facet::_S_create_c_locale name not valid
a google serach delivers this:
http://groups.google.com/group/gnu.gcc.help/browse_thread/thread/99d874aed6b46fdd
appearantly, a --enable-clocale to configure might do something
however, macport's configure stage does not allow for adding options (or I could not find it)
- could this be fixed in gcc? (in libstdc++)
- could this be added to macport (adding extra configure options)