aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2016-04-18 16:43:50 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2016-04-18 16:43:50 +0100
commit8dc1e574aeed3522ce95b83290a84933805199b0 (patch)
treeb814857802308bf09fcf11a5f3af8df367d357ee /libstdc++-v3
parent8270b82dd6523937110a2488194d8692a09299f5 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--libstdc++-v3/include/ext/string_conversions.h16
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;