diff --git a/libstdc++-v3/include/ext/string_conversions.h b/libstdc++-v3/include/ext/string_conversions.h index 58387a2..3b62c9a 100644 --- a/libstdc++-v3/include/ext/string_conversions.h +++ b/libstdc++-v3/include/ext/string_conversions.h @@ -58,8 +58,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _Ret __ret; _CharT* __endptr; - const int __saved_errno = errno; - errno = 0; + + struct _Restore_errno { + _Restore_errno() : _M_errno(errno) { errno = 0; } + ~_Restore_errno() { errno = _M_errno; } + int _M_errno; + } const __restore; + const _TRet __tmp = __convf(__str, &__endptr, __base...); if (__endptr == __str) @@ -71,7 +76,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION std::__throw_out_of_range(__name); else __ret = __tmp; - errno = __saved_errno; if (__idx) *__idx = __endptr - __str;