Merge pull request #641 from sergiud/nullptr
CHECK support for nullptr (fixes #341)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e6784fc..62ebbcc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -241,6 +241,12 @@
int main() { }
" HAVE_CXX11_ATOMIC)
+check_cxx_source_compiles ("
+#include <cstddef>
+void foo(std::nullptr_t) {}
+int main(void) { foo(nullptr); }
+" HAVE_CXX11_NULLPTR_T)
+
if (WITH_TLS)
# Cygwin does not support the thread attribute. Don't bother.
if (HAVE_GCC_TLS)
@@ -382,6 +388,12 @@
set (ac_cv_cxx_using_operator 0)
endif (HAVE_USING_OPERATOR)
+if (HAVE_CXX11_NULLPTR_T)
+ set (ac_cv_cxx11_nullptr_t 1)
+else (HAVE_CXX11_NULLPTR_T)
+ set (ac_cv_cxx11_nullptr_t 0)
+endif (HAVE_CXX11_NULLPTR_T)
+
if (HAVE_EXECINFO_H)
set (HAVE_STACKTRACE 1)
endif (HAVE_EXECINFO_H)
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index d90f859..c1c44fe 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -26,6 +26,7 @@
Abhishek Parmar <abhishek@orng.net>
Andrew Schwartzmeyer <andrew@schwartzmeyer.com>
Andy Ying <andy@trailofbits.com>
+Bret McKee <bretmckee@google.com>
Brian Silverman <bsilver16384@gmail.com>
Fumitoshi Ukai <ukai@google.com>
Guillaume Dumont <dumont.guillaume@gmail.com>
diff --git a/bazel/glog.bzl b/bazel/glog.bzl
index 7429576..40833b4 100644
--- a/bazel/glog.bzl
+++ b/bazel/glog.bzl
@@ -50,6 +50,7 @@
"-DGLOG_BAZEL_BUILD",
# Inject a C++ namespace.
"-DGOOGLE_NAMESPACE='%s'" % namespace,
+ "-DHAVE_CXX11_NULLPTR_T",
"-DHAVE_STDINT_H",
"-DHAVE_STRING_H",
"-DHAVE_UNWIND_H",
@@ -186,6 +187,7 @@
)
common_config = {
+ "@ac_cv_cxx11_nullptr_t@": "1",
"@ac_cv_cxx_using_operator@": "1",
"@ac_cv_have_inttypes_h@": "0",
"@ac_cv_have_u_int16_t@": "0",
diff --git a/src/config.h.cmake.in b/src/config.h.cmake.in
index c4f0136..8a989e4 100644
--- a/src/config.h.cmake.in
+++ b/src/config.h.cmake.in
@@ -195,6 +195,9 @@
/* Check whether C++11 atomic is available */
#cmakedefine HAVE_CXX11_ATOMIC ${HAVE_CXX11_ATOMIC}
+/* Check whether C++11 nullptr_t is available */
+#cmakedefine HAVE_CXX11_NULLPTR_T ${HAVE_CXX11_NULLPTR_T}
+
/* Version number of package */
#cmakedefine VERSION
diff --git a/src/glog/logging.h.in b/src/glog/logging.h.in
index 1e80cce..421f1e0 100644
--- a/src/glog/logging.h.in
+++ b/src/glog/logging.h.in
@@ -37,6 +37,7 @@
#define _LOGGING_H_
#include <cerrno>
+#include <cstddef>
#include <cstring>
#include <ctime>
#include <iosfwd>
@@ -731,6 +732,13 @@
template <> GOOGLE_GLOG_DLL_DECL
void MakeCheckOpValueString(std::ostream* os, const unsigned char& v);
+// This is required because nullptr is only present in c++ 11 and later.
+#if @ac_cv_cxx11_nullptr_t@
+// Provide printable value for nullptr_t
+template <> GOOGLE_GLOG_DLL_DECL
+void MakeCheckOpValueString(std::ostream* os, const std::nullptr_t& v);
+#endif
+
// Build the error message string. Specify no inlining for code size.
template <typename T1, typename T2>
std::string* MakeCheckOpString(const T1& v1, const T2& v2, const char* exprtext)
diff --git a/src/logging.cc b/src/logging.cc
index cfece07..71de91d 100644
--- a/src/logging.cc
+++ b/src/logging.cc
@@ -2547,6 +2547,13 @@
}
}
+#ifdef HAVE_CXX11_NULLPTR_T
+template <>
+void MakeCheckOpValueString(std::ostream* os, const std::nullptr_t& v) {
+ (*os) << "nullptr";
+}
+#endif // defined(HAVE_CXX11_NULLPTR_T)
+
void InitGoogleLogging(const char* argv0) {
glog_internal_namespace_::InitGoogleLoggingUtilities(argv0);
}