619{
622
623 if (*_number ==
__T(
'\0') || iswspace((wint_t)*_number)) {
624 throw new NumericConvertException(_number, _base, 0);
625 }
626
627 NumericConvertException::Error error = NumericConvertException::NoError;
628 wchar_t* endptr =
NULL;
629 unsigned long long n = wcstoull(_number, &endptr, _base);
630 if (ULLONG_MAX ==
n) {
631 error = NumericConvertException::Overflow;
632 }
633
634 if (NumericConvertException::NoError != error) {
635 throw new NumericConvertException(
636 error,
637 _number,
638 _base
639 );
640 }
641
642 if ((endptr && *endptr != '\0') || errno == EINVAL) {
643 throw new NumericConvertException(
644 _number,
645 _base,
646 endptr ? (endptr - _number) : 0
647 );
648 }
649
651}