Beispielsweise der Buchstabe ö ist UTF-8 kodiert aus zwei Zeichen bestehend. Das erste ist 0xC3, das zweite 0xB6. Im Unicodezeichensatz ist ö das Zeichen 0xF6. Unabhängig welchen Zeichensatz davon du verwendest handelt es sich bei allen Werten als signed char interpretiert um negative Werte.
isspace prüft aber, ob der übergebene Wert ein unsigned char (0-255) ist. 0xF6 (-10) ist natürlich < 0 und daher stürzt es da ab. Mit dem static_cast<unsigned char> wird die entsprechende unsigned Variante im 2er Komplement verwendet, was 246 ist. Damit hat dann auch isspace kein Problem mehr.
Viele Grüsse
Cromon