libstdc++/5280: Problems with named locales and iostreams (gnulocale)

Peter Schmid schmid@snake.iap.physik.tu-darmstadt.de
Fri Jan 4 15:06:00 GMT 2002


>Number:         5280
>Category:       libstdc++
>Synopsis:       Problems with named locales and iostreams (gnulocale)
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Jan 04 15:06:00 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     Peter Schmid
>Release:        3.1 20011229 (experimental)
>Organization:
TU Darmstadt
>Environment:
System: Linux kiste 2.4.17 #7 Thu Jan 3 17:21:51 CET 2002 i686 unknown
Architecture: i686
SuSE 7.3
glibc 2.2.4 + patches
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: ../gcc/configure --enable-shared --disable-nls --enable-threads --enable-languages=c,c++,f77,objc --enable-concept-checks
>Description:
After updating my system libc I tried name locales again. They no longer
crash but the call to the default named locale does only partly work. For
example, consider the following code tl.C. Doubles are output
according to the default locale, the locale employed for input is read
in by the program. When LANG is set to C, everything works as
expected. Doubles separated with a comma as decimal point are
transformed into doubles with a dot as a separator. 
 
LANG=C ./tl 
de_DE
cout locale: C
cin locale: de_DE
1,2
1.2
1,3
1.3 
^D pressed

Unfortunately, when LANG is set to de_DE this does no longer work. The
comma is a not accepted as a valid separator as it should and the loop
terminates with an error. If I set LANG to a different value, for
example fr_FR, the same problem occurs.

LANG=de_DE ./tl
de_DE
cout locale: de_DE
cin locale: de_DE
1,3

>How-To-Repeat:
tl.C
#include <iostream>
#include <locale>
#include <string>
#include <cstdlib>
using namespace std;

int main()
{
  locale coutLocale("");
  cout.imbue(coutLocale);

  string s;
  cin >> s;
  if (!cin) {
    cerr << "ERROR while reading the locale" << endl;
    return EXIT_FAILURE;
  }
  

locale cinLocale(s.c_str());
cin.imbue(cinLocale);

cout << "cout locale: " << coutLocale.name() << endl;
cout << "cin locale: " << cinLocale.name() << endl;
double value;
while (cin >> value) {
  cout << value << endl;
}
}

Compiling tl.C 
g++ -v -o tl tl.C -W -Wall 
Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/specs
Configured with: ../gcc/configure --enable-shared --disable-nls --enable-threads --enable-languages=c,c++,f77,objc --enable-concept-checks
Thread model: posix
gcc version 3.1 20011229 (experimental)
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/cc1plus -v -D__GNUC__=3 -D__GNUC_MINOR__=1 -D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__NO_INLINE__ -D__STDC_HOSTED__=1 -W -Wall -D_GNU_SOURCE -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i686__ -D__tune_pentiumpro__ tl.C -D__GNUG__=3 -D__DEPRECATED -D__EXCEPTIONS -D__GXX_ABI_VERSION=100 -quiet -dumpbase tl.C -W -Wall -version -o /tmp/cc8e37VS.s
GNU CPP version 3.1 20011229 (experimental) (cpplib) (i386 Linux/ELF)
GNU C++ version 3.1 20011229 (experimental) (i686-pc-linux-gnu)
	compiled by GNU C version 3.1 20011229 (experimental).
ignoring nonexistent directory "NONE/include"
ignoring nonexistent directory "/usr/local/i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include/g++-v3
 /usr/local/include/g++-v3/i686-pc-linux-gnu
 /usr/local/include/g++-v3/backward
 /usr/local/include
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/include
 /usr/include
End of search list.
 as -V -Qy -o /tmp/ccxwlGmA.o /tmp/cc8e37VS.s
GNU assembler version 2.11.90.0.29 (i486-suse-linux) using BFD version 2.11.90.0.29
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/collect2 -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o tl /usr/lib/crt1.o /usr/lib/crti.o /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/crtbegin.o -L/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1 -L/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/../../.. /tmp/ccxwlGmA.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/crtend.o /usr/lib/crtn.o


>Fix:
	
>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the Gcc-bugs mailing list