[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Problem with --disable-c-mbchar and std::tolower
From: |
Warren_Baird |
Subject: |
Problem with --disable-c-mbchar and std::tolower |
Date: |
Wed, 18 May 2005 10:16:14 -0400 |
We're writing software that was ported from windows to unix, so it assumes
that wchar_t is 2 bytes instead of 4 bytes. We're using the -fshort-wchar
gcc flag, but we've found that creating an std::basic_string of wchar_t
cause all kinds of problems unless we configured gcc with the
"--disable-c-mbchar" option.
This was working fine for quite a while, but recently we discovered that
calling std::tolower on a wchar_t with a locale argument causes a
'bad_cast' exception to be thrown.
Code as simple as the following:
wchar_t c = L'H';
wchar_t c1 = std::tolower(c, std::locale());
will generate the bad_cast exception.
What seems to be happening is that the use_facet code is looking at
ctype<wchar_t>::_M_id(), finding that it is out of range ( it's greater
than locale's _M_impl->_M_facets_size), and throwing the exception. I'm
assuming this is happening because "--disable-c-mbchar" is setting things
up so that the wchar_t info isn't in the list of facets.
Any suggestions on how to resolve this? The plans I'm considering are to
find the STL code that adds the wchar_t info to the facet list and
reintroducing it manually, or to turn off the disable-c-mbchar
configuration option, and try to get things working like that. But I
must admit neither option sounds ideal to me, so I'd appreciate other
suggestions.
I've tested this with both gcc 3.4.2 and 4.0.0 on linux/x86, Solaris
9/sparc and HPUX11/pa-risc and I get the same behaviour everywhere - if
the "--disable-c-mbchar" configuration option is used.
Warren,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Problem with --disable-c-mbchar and std::tolower,
Warren_Baird <=