diff --git a/CMakeLists.txt b/CMakeLists.txt index 64e575e23..50f439227 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -240,6 +240,12 @@ std::atomic i; int main() { } " HAVE_CXX11_ATOMIC) +check_cxx_source_compiles (" +#include +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) @@ -381,6 +387,12 @@ else (HAVE_USING_OPERATOR) 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 d90f85988..c1c44fe51 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -26,6 +26,7 @@ Abhishek Dasgupta Abhishek Parmar Andrew Schwartzmeyer Andy Ying +Bret McKee Brian Silverman Fumitoshi Ukai Guillaume Dumont diff --git a/src/glog/logging.h.in b/src/glog/logging.h.in index d989c1195..a77e4d5a4 100644 --- a/src/glog/logging.h.in +++ b/src/glog/logging.h.in @@ -37,6 +37,7 @@ #define _LOGGING_H_ #include +#include #include #include #include @@ -673,6 +674,13 @@ void MakeCheckOpValueString(std::ostream* os, const signed char& v); 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 std::string* MakeCheckOpString(const T1& v1, const T2& v2, const char* exprtext) diff --git a/src/logging.cc b/src/logging.cc index 25614b613..316972350 100644 --- a/src/logging.cc +++ b/src/logging.cc @@ -2506,6 +2506,13 @@ void MakeCheckOpValueString(std::ostream* os, const unsigned char& v) { } } +#if __cplusplus >= 201103L +template <> +void MakeCheckOpValueString(std::ostream* os, const std::nullptr_t& v) { + (*os) << "nullptr"; +} +#endif + void InitGoogleLogging(const char* argv0) { glog_internal_namespace_::InitGoogleLoggingUtilities(argv0); }