libstdc++/3679: Problems with default locale

Peter Schmid
Fri Jul 13 10:06:00 GMT 2001

>Number:         3679
>Category:       libstdc++
>Synopsis:       Problems with default locale
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Jul 13 10:06:00 PDT 2001
>Originator:     Peter Schmid
>Release:        3.1 20010710 (experimental)
TU Darmstadt
System: Linux kiste 2.4.6 #6 Wed Jul 11 02:21:23 CEST 2001 i686 unknown
Architecture: i686
GNU ld version (with BFD
SuSE 7.1

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=posix --enable-clocale=gnu --enable-languages=c,c++,f77,objc
According to Josuttis "The C++ Standard Library" page 696 -- 697
passing an empty string as the name of the locale has a special
meaning. The default locale from the users's environment is used
(determined the environment variable LANG on Linux). But that does not work
with the current libstdc++ implementation. The value of LANG is 
ignored and the name of Locale1 in the program tgl is set to the empty
string which is wrong. Explicitly importing the German locale as in
Locale2 works though. 
Source code tgl.C
#include <iostream>
#include <locale>

using namespace std;

int main()
    locale Locale1("");
    cout << << endl;

    locale Locale2("de_DE");
    cout << << endl;


Compiling tgl.C
g++ -v -o tgl tgl.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=posix --enable-clocale=gnu --enable-languages=c,c++,f77,objc
Thread model: posix
gcc version 3.1 20010710 (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__ tgl.C -D__GNUG__=3 -D__DEPRECATED -D__EXCEPTIONS -D__GXX_ABI_VERSION=100 -quiet -dumpbase tgl.C -W -Wall -version -o /tmp/ccMPOA3S.s
GNU CPP version 3.1 20010710 (experimental) (cpplib) (i386 Linux/ELF)
GNU C++ version 3.1 20010710 (experimental) (i686-pc-linux-gnu)
	compiled by GNU C version 3.1 20010710 (experimental).
ignoring nonexistent directory "/usr/local/i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
End of search list.
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/../../../../i686-pc-linux-gnu/bin/as -V -Qy -o /tmp/cc7kLbiW.o /tmp/ccMPOA3S.s
GNU assembler version (i686-pc-linux-gnu) using BFD version
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/collect2 -m elf_i386 -dynamic-linker /lib/ -o tgl /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/../../../../i686-pc-linux-gnu/lib -L/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/../../.. /tmp/cc7kLbiW.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

Running tgl

LANG=de_DE ./tgl


More information about the Gcc-bugs mailing list