diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2016-04-18 16:43:50 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2016-04-18 16:43:50 +0100 |
commit | 8dc1e574aeed3522ce95b83290a84933805199b0 (patch) | |
tree | b814857802308bf09fcf11a5f3af8df367d357ee /libstdc++-v3 | |
parent | 8270b82dd6523937110a2488194d8692a09299f5 (diff) | |
download | gcc-8dc1e574aeed3522ce95b83290a84933805199b0.zip gcc-8dc1e574aeed3522ce95b83290a84933805199b0.tar.gz gcc-8dc1e574aeed3522ce95b83290a84933805199b0.tar.bz2 |
Avoid -Wsign-compare warnings in std::to_string()
* include/ext/string_conversions.h (__stoa): Avoid -Wsign-compare
warnings.
From-SVN: r235151
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 5 | ||||
-rw-r--r-- | libstdc++-v3/include/ext/string_conversions.h | 16 |
2 files changed, 18 insertions, 3 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 2cabdac..5f47dcd 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2016-04-18 Jonathan Wakely <jwakely@redhat.com> + + * include/ext/string_conversions.h (__stoa): Avoid -Wsign-compare + warnings. + 2016-04-17 Edward Smith-Rowland <3dw4rd@verizon.net> * include/bits/specfun.h: Trivial comment misspelling. diff --git a/libstdc++-v3/include/ext/string_conversions.h b/libstdc++-v3/include/ext/string_conversions.h index 8a8fec1..0a0036d 100644 --- a/libstdc++-v3/include/ext/string_conversions.h +++ b/libstdc++-v3/include/ext/string_conversions.h @@ -65,14 +65,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION int _M_errno; } const __save_errno; + struct _Range_chk { + static bool + _S_chk(_TRet, std::false_type) { return false; } + + static bool + _S_chk(_TRet __val, std::true_type) // only called when _Ret is int + { + return __val < _TRet(__numeric_traits<int>::__min) + || __val > _TRet(__numeric_traits<int>::__max); + } + }; + const _TRet __tmp = __convf(__str, &__endptr, __base...); if (__endptr == __str) std::__throw_invalid_argument(__name); else if (errno == ERANGE - || (std::__are_same<_Ret, int>::__value - && (__tmp < __numeric_traits<int>::__min - || __tmp > __numeric_traits<int>::__max))) + || _Range_chk::_S_chk(__tmp, std::is_same<_Ret, int>{})) std::__throw_out_of_range(__name); else __ret = __tmp; |