aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.txt5
-rw-r--r--src/google/protobuf/stubs/mathlimits.h17
2 files changed, 14 insertions, 8 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 110fb066..1f1dd6d5 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,11 +1,11 @@
-2017-08-01 version 3.4.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript)
+2017-08-14 version 3.4.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript)
Planned Future Changes
* There are some changes that are not included in this release but are planned
for the near future
- Preserve unknown fields in proto3: We are going to bring unknown fields
back into proto3. In this release, some languages start to support
preserving unknown fields in proto3, controlled by flags/options. Some
- languages also introduce explict APIs to drop unknown fields for
+ languages also introduce explicit APIs to drop unknown fields for
migration. Please read the change log sections by languages for details.
For general timeline and plan:
@@ -45,6 +45,7 @@
$ protoc --cpp_out=table_driven_parsing,table_driven_serialization:./ \
test.proto
+
* lite generator parameter supported by the generator. Once set, all generated
files, use lite runtime regardless of the optimizer_for setting in the
.proto file.
diff --git a/src/google/protobuf/stubs/mathlimits.h b/src/google/protobuf/stubs/mathlimits.h
index 275d9539..2391ac4c 100644
--- a/src/google/protobuf/stubs/mathlimits.h
+++ b/src/google/protobuf/stubs/mathlimits.h
@@ -43,18 +43,23 @@
#ifndef UTIL_MATH_MATHLIMITS_H__
#define UTIL_MATH_MATHLIMITS_H__
-// GCC 4.9 has a bug that makes it impossible to use isinf and isnan when both
-// <math.h> and <cmath> get pulled into the same translation unit.
-// Unfortunately it is difficult to prevent this from happening, so to work
-// around the problem we use std::isinf and std::isnan from <cmath> for C++11
-// builds and otherwise use the plain isinf and isnan functions from <math.h>.
// Note that for Windows we do something different because it does not support
// the plain isinf and isnan.
#if __cplusplus >= 201103L
+// GCC 4.9 has a bug that makes isinf and isnan ambigious when both <math.h>
+// and <cmath> get pulled into the same translation unit. We use the ones in
+// std:: namespace explicitly for C++11
#include <cmath>
+#define GOOGLE_PROTOBUF_USE_STD_CMATH
+#elif _GLIBCXX_USE_C99_MATH && !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC
+// libstdc++ <cmath> header undefines the global macros and put functions in
+// std:: namespace even before C++11. Use the ones in std:: instead too.
+#include <cmath>
+#define GOOGLE_PROTOBUF_USE_STD_CMATH
#else
#include <math.h>
#endif
+
#include <string.h>
#include <cfloat>
@@ -229,7 +234,7 @@ DECL_UNSIGNED_INT_LIMITS(unsigned long long int)
// For non-Windows builds we use the std:: versions of isinf and isnan if they
// are available; see the comment about <cmath> at the top of this file for the
// details on why we need to do this.
-#if __cplusplus >= 201103L
+#ifdef GOOGLE_PROTOBUF_USE_STD_CMATH
#define ISINF std::isinf
#define ISNAN std::isnan
#else