Open folery opened 3 months ago
I am using this as a work around for #933
#ifndef GOOGLE_STRIP_LOG
#define GOOGLE_STRIP_LOG 0
#endif
#include <glog/logging.h>
#define MY_LOG_INT_(severity, lvl) \
if constexpr (GOOGLE_STRIP_LOG >= lvl) {} \
else LOG(severity)
#define MY_LOGIF_INT_(severity, test, lvl) \
if constexpr (GOOGLE_STRIP_LOG >= lvl) {} \
else LOG_IF(severity, test)
#define SEVERITY_LVL_INFO (1)
#define SEVERITY_LVL_WARNING (2)
#define SEVERITY_LVL_ERROR (3)
#define SEVERITY_LVL_FATAL (4)
#define MY_LOG(severity) \
if constexpr (GOOGLE_STRIP_LOG >= SEVERITY_LVL_##severity) {} \
else LOG(severity)
#define MY_LOG_BUILD(severity, code) \
if constexpr (GOOGLE_STRIP_LOG >= SEVERITY_LVL_##severity) {} \
else { code }
#define MY_LOG_IF(severity, test) MY_LOGIF_INT_(severity, test, SEVERITY_LVL_##severity)
This is how LOG_IF is implemented now. After reading the doc https://github.com/asplingzhang/asplingzhang.github.io/blob/main/docs/_posts/webrtc/logging/2022-06-14-why-static_cast-void-and-LogMessageVoidify-needed-in-logging-macros.md, I understand the reason for using LogMessageVoidify, while it turns the LOG_IF from ostream into void. If someone wants to wrap LOG_IF or VLOG, it causes error:
The code above causes errors like
error: no match for 'operator&' (operand types are 'google::LogMessageVoidify' and 'void')
I can't use VLOG_IF in my wrapper for other reasons.So I want to know if I can use NullStream instead like:
Thus LOG_IF is still an ostream and we can wrap it. What's the difference between using google::NullStream and LogMessageVoidify?