848{
850
851 if (*_number ==
__T(
'\0') || iswspace((wint_t)*_number)) {
852 throw new NumericConvertException(_number, 0, 0);
853 }
854
855 NumericConvertException::Error error = NumericConvertException::NoError;
856 errno = 0;
857 wchar_t* endptr =
NULL;
858 double n = wcstod(_number, &endptr);
859 if (errno == ERANGE) {
860 if (+HUGE_VAL == n || -HUGE_VAL == n) {
861 error = NumericConvertException::Overflow;
862 }
863 else if (!(DBL_MIN < n)) {
864 error = NumericConvertException::Underflow;
865 }
866 }
867
868 if (NumericConvertException::NoError != error) {
869 throw new NumericConvertException(
870 error,
871 _number,
872 0
873 );
874 }
875
876 if ((endptr && *endptr != '\0') || errno == EINVAL) {
877 throw new NumericConvertException(
878 _number,
879 0,
880 endptr ? (endptr - _number) : 0
881 );
882 }
883
884 return (double) n;
885}
#define __DCL_ASSERT(expr)