( persicsb | 2019. 10. 02., sze – 15:31 )

Húha, bonyolult kérdés ez.
Egyrészt, az ASCII az egy 7 bites kódolás, 127 felett nincs is egyáltalán code point.
A 160 mint NBSP az ISO 8859-1 kódolás szerint igaz. Ez már valóban 8 bites kódolás, de ez nem ASCII.
Egyáltalán definiálva van, hogy a bemenet az ISO 8859-1 kódolású?
Az std::string olyan karakterkészletekre jó, amiknél egy karakter egy byte-ra kódolódik. Ebből azért sokféle van.
A szerencséd az, hogy az ISO 8859 bármelyik alfajában a 160-as karakter az NBSP.

Igazi emberi szöveg kezelésére az std::string nem jó, erre vannak sokkal jobb megoldások, pl. az IBM ICU.
http://site.icu-project.org/
Ez korrektul képes arra, hogy egy bytesorozatot megadott karakterkódolással az adott kódolásnak megfelelő karakterkészlet karakterláncaként tudja értelmezni, le tudod kérdezni, hogy az adott karakter az whitespace-e. És arra is többféle definíció van még Unicode-ban is, hogy mi a whitespace.
Lásd: https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/uchar_8h.h…