------- Comment #1 from paolo dot carlini at oracle dot com 2008-12-03 10:34 ------- This sort-of inconsistency is essentially due to the glibc specifics (+ the fact that we are dealing separately with "C" locale) see the below GNU C snippet. In particular, note in numeric_members.cc that we already deal correctly with the possibility of THOUSANDS_SEP == '\0'. In my opinion, all the past discussions in this area considered, we should only tweak monetary_members.cc vs __MON_DECIMAL_POINT == '\0' (possibly __MON_THOUSANDS_SEP == '\0' too) in complete analogy with numeric_members.cc vs THOUSANDS_SEP == '\0'.
///////////// #define _GNU_SOURCE #include <locale.h> #include <stdio.h> #include <langinfo.h> #include <assert.h> int main() { __locale_t cloc = 0; char ts = 'z'; cloc = __newlocale(1 << LC_ALL, "LC_CTYPE=C;LC_NUMERIC=C;LC_TIME=C;LC_COLLATE=C;LC_MONETARY=C;LC_MESSAGES=C;LC_PAPER=C;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;LC_IDENTIFICATION=C", cloc); ts = *(nl_langinfo_l(THOUSANDS_SEP, cloc)); assert( ts == '\0' ); printf("%c\n", ts); cloc = 0; ts = 'z'; cloc = __newlocale(1 << LC_ALL, "LC_CTYPE=C;LC_NUMERIC=C;LC_TIME=C;LC_COLLATE=C;LC_MONETARY=C;LC_MESSAGES=C;LC_PAPER=C;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;LC_IDENTIFICATION=C", cloc); ts = *(nl_langinfo_l(__MON_DECIMAL_POINT /*__MON_THOUSANDS_SEP*/, cloc)); assert( ts == '\0' ); printf("%c\n", ts); return 0; } -- paolo dot carlini at oracle dot com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |paolo at gcc dot gnu dot | |org, bkoz at redhat dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38368