
When use UTF8, non ASCII char is > 127, but char is signed, So if the value > 127, the char c is < 0, (unsigned)(c + 1) is a big value, read_info() assert in vs2010 when use UTF8 in debug build. std::isspace() call extern "C" int __cdecl _chvalidator( int c, int mask ) { _ASSERTE((unsigned)(c + 1) <= 256); return _chvalidator_l(NULL, c, mask); } My patch is us my_isspace(): template<class Ch> bool my_isspace(const Ch c) { if(c >= 0 && c <= 127) { return isspace(c); } return false; } boost_1_46_0\boost\property_tree\detail\info_parser_read.hpp // Advance pointer past whitespace template<class Ch> void skip_whitespace(const Ch *&text) { using namespace std; while (isspace(*text)) ++text; } // Extract word (whitespace delimited) and advance pointer accordingly template<class Ch> std::basic_string<Ch> read_word(const Ch *&text) { using namespace std; skip_whitespace(text); const Ch *start = text; while (!isspace(*text) && *text != Ch(';') && *text != Ch('\0')) ++text; return expand_escapes(start, text); }