515{
518
519 if (*_number ==
__T(
'\0') || iswspace((wint_t)*_number)) {
520 throw new NumericConvertException(_number, _base, 0);
521 }
522
523 NumericConvertException::Error error = NumericConvertException::NoError;
524 wchar_t* endptr =
NULL;
525 long long n = wcstoll(_number, &endptr, _base);
526 if (LLONG_MIN ==
n) {
527 error = NumericConvertException::Underflow;
528 }
else if (LLONG_MAX ==
n) {
529 error = NumericConvertException::Overflow;
530 }
531
532 if (NumericConvertException::NoError != error) {
533 throw new NumericConvertException(
534 error,
535 _number,
536 _base
537 );
538 }
539
540 if ((endptr && *endptr != '\0') || errno == EINVAL) {
541 throw new NumericConvertException(
542 _number,
543 _base,
544 endptr ? (endptr - _number) : 0
545 );
546 }
547
549}