aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Nico Weber <nicolasweber@gmx.de>2015-07-17 14:16:03 -0700
committerGravatar Nico Weber <nicolasweber@gmx.de>2015-07-17 14:18:36 -0700
commit56a90a2081379a5286edf0eea70aa2000e26c7f9 (patch)
tree70faa85e8c3d7f78a99da2e4f3a64fdff14b5a38 /src
parent798ed10e7ac36d64790edc06cf378f04598911c5 (diff)
Let GOOGLE_COMPILE_ASSERT use static_assert if available.
The motivation is that gcc 4.8+ and clang trunk warn on unused local typedefs, which COMPILE_ASSERT adds. After this change, the warning will be happy at least in C++11 builds. static_assert also produces a slighly nicer diagnostic than the typedef method. https://github.com/google/re2/commit/eb93e8bc43ac8d05322fb3e9fc885898ad924f8a did the same change in re2.
Diffstat (limited to 'src')
-rw-r--r--src/google/protobuf/stubs/macros.h6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/google/protobuf/stubs/macros.h b/src/google/protobuf/stubs/macros.h
index eb38268e..0e9a9ec1 100644
--- a/src/google/protobuf/stubs/macros.h
+++ b/src/google/protobuf/stubs/macros.h
@@ -113,12 +113,13 @@ struct CompileAssert {
} // namespace internal
#undef GOOGLE_COMPILE_ASSERT
+#if __cplusplus >= 201103L
+#define GOOGLE_COMPILE_ASSERT(expr, msg) static_assert(expr, #msg)
+#else
#define GOOGLE_COMPILE_ASSERT(expr, msg) \
::google::protobuf::internal::CompileAssert<(bool(expr))> \
msg[bool(expr) ? 1 : -1]; \
(void)msg
-
-
// Implementation details of COMPILE_ASSERT:
//
// - COMPILE_ASSERT works by defining an array type that has -1
@@ -159,6 +160,7 @@ struct CompileAssert {
//
// This is to avoid running into a bug in MS VC 7.1, which
// causes ((0.0) ? 1 : -1) to incorrectly evaluate to 1.
+#endif // __cplusplus >= 201103L
} // namespace protobuf
} // namespace google