Функция wcstod проверяет диапазон значений, т.е.:
void p() {
setlocale(LC_ALL, "C");
wchar_t *endptr;
double d = wcstod(L"5.7E+99999999", &endptr);
if (d == HUGE_VAL || d == -HUGE_VAL) {
// error
};
}
А как это сделать с wistringstream? А как сделать для int, например. Если с потоками невозможно, то как по другому преобразовывать строку в число с проверкой диапазона и чтобы локаль использовалась классическая и чтобы не нужно было менять глобальную локаль (как С-шную так и С++-ую.).