403{
406
407 if (*_number ==
__T(
'\0') || iswspace((wint_t)*_number)) {
408 throw new NumericConvertException(_number, _base, 0);
409 }
410
411 NumericConvertException::Error error = NumericConvertException::NoError;
412 wchar_t* endptr =
NULL;
413 unsigned long n = wcstoul(_number, &endptr, _base);
414 if (ULONG_MAX ==
n) {
415 error = NumericConvertException::Overflow;
416 }
417#if __WORDSIZE > 32
419 error = NumericConvertException::Overflow;
420 }
421#endif
422 if (NumericConvertException::NoError != error) {
423 throw new NumericConvertException(
424 error,
425 _number,
426 _base
427 );
428 }
429
430 if ((endptr && *endptr != '\0') || errno == EINVAL) {
431 throw new NumericConvertException(
432 _number,
433 _base,
434 endptr ? (endptr - _number) : 0
435 );
436 }
437
439}