summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
authorMichael Goulish <mgoulish@apache.org>2013-01-10 15:36:02 +0000
committerMichael Goulish <mgoulish@apache.org>2013-01-10 15:36:02 +0000
commit3f824298f5a73bf45a16a93977a65753cb6ae02b (patch)
tree0f97ee803440409e36669ac8c7fe80d79c4beed6 /qpid/cpp/src
parentfd39ffbc8ecbb56fb5921b5cfe0790abafc7c21a (diff)
downloadqpid-python-3f824298f5a73bf45a16a93977a65753cb6ae02b.tar.gz
JIRA-4531 : Variant.cpp cast of -0 failing with older GCC
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1431435 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
-rw-r--r--qpid/cpp/src/qpid/types/Variant.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/qpid/cpp/src/qpid/types/Variant.cpp b/qpid/cpp/src/qpid/types/Variant.cpp
index 9b981c9171..56a93799ed 100644
--- a/qpid/cpp/src/qpid/types/Variant.cpp
+++ b/qpid/cpp/src/qpid/types/Variant.cpp
@@ -113,6 +113,16 @@ class VariantImpl
template<class T> T convertFromString() const
{
const std::string& s = *value.string;
+
+ // The lexical cast below is throwing when the type
+ // is signed and the value is negative-zero. Bug, I guess.
+ // So short-circuit it here. Negative zero is zero.
+ double dbl_val = atof ( s.c_str() );
+ if ( ( dbl_val == 0 ) && ( 0 == s.find('-') ) ) {
+ T r = 0;
+ return r;
+ }
+
try {
T r = boost::lexical_cast<T>(s);
//lexical_cast won't fail if string is a negative number and T is unsigned