From: <dan...@ya...> - 2002-01-29 21:15:18
|
--- Oleg Sesov <se...@ma...> wrote: > > Wu Yongwei wrote: > > > Definitely I should have checked it twice before posting: getc works > properly. > It returns 8-bit characters in a right bound, so the problem lays in > string_char_traits itself: is_del has parameter type char and calls > isspace with integer parameter --- conversation to and fro signed char > and integer leads to sign appearance and to bounds error. Thus problem > is here --- is_del should be declared like that: > > static bool is_del(int a) { return isspace(a); } or static bool is_del(char_type a) { return isspace((int)a); > > or we could use -funsigned-char command-line option. > > > I confirmed that iswspace should not have problems: fgetwc returns > > wint_t, which is defined as unsigned short in MSVC, and unsigned int in > > MinGW. All normal values should be positive. Anyone can explain to me > > why wint_t is defined differently than in MSVC? And the line "#define > > __WCHAR_TYPE__ int" in <stddef.h> looks strange (followed by "typedef > > __WCHAR_TYPE__ wchar_t", thought it does not seem to have any effect). > > __WCHAR_TYPE__ seems to be defined in > $MINGW/lib/gcc-lib/mingw32/2.95.3-6/cpp0, > at least 'echo __WCHAR_TYPE__ | cpp' outputs 'short unsigned int', and > 'cpp0' contains such a string. But I can't see it with 'echo | cpp -dM' > or it is right? > __WCHAR_TYPE__ is a built-in type defined as short unsigned int during the building of gcc. Ditto for things like __SIZE_TYPE__ and __PTR_DIFF_TYPE__. The define in stddef.h is reached only when the target configuration doesn't define __WCHAR_TYPE__. > > > > It seems there are no feasible ideal solutions for the current problem, > > so we should just patch straits.h to let Alexandros's program work (it > > really should, and do in MSVC (either mode including /MD) and Cygwin), > > for now. > > > > Best regards, > > > > Wu Yongwei > > To Danny: > > > FWIW, the code that Alexandros posted in original report works just > fine > > with libstdc++-v3 on mingw using current mingw runtime. > Sorry, a bit of confusion here. I was talking about g++-v3 which ships with GCC 3.x/libstdc++-v3, _not_ g++-3, which ships with 2.95. The new STL handles delimiters in a much more generalised (and correct) way. Danny http://my.yahoo.com.au - My Yahoo! - It's My Yahoo! Get your own! |