Andrew Black wrote:
Greetings all.

When building the UTF-8 locales on windows with the debug version of the localedef utility, the localedef utility terminates with a failed assertion within the library (in __rw_debug_iter::operator*() in _iterbase.h). Within collate.cpp, the failure occurs on line 579.

A trace of the code

It might be helpful to see the stack trace.

indicates that the last good iteration across this line is iteration number 56677, for the token 'UFFFD'.

I assume this on line 23337 of UTF-8.

The following token (<U00010300>) fails because __rw_debug_iter::_C_is_end() returns true. However, my reading of collate.cpp is that this condition shouldn't happen, as the termination condition of loop containing the statement in question is suppose to terminate when this condition is reached.

Does this indicate a flaw in std::map or something else?

More likely, in collate.cpp or somewhere in the rest of localedef.
I suspect it has to do with wchar_t being only 16 bits wide on
Windows and the character map containing characters (such as
<U00010300>) beyond that range. To fix this we'll either need to
replace wchar_t with a 32-bit type or ignore characters that do
not fit in 16 bits on Windows (and wherever else wchar_t isn't
32 bits, such as AIX).

Martin

Reply via email to