Мне нужен регистратор для отладки, и я использую Boost.Log (1.54.0 с патчем на домашней странице boost.org).
Все в порядке, я создал такой макрос:
#define LOG_MESSAGE( lvl ) BOOST_LOG_TRIVIAL( lvl )
Таким образом, LOG_MESSAGE(lvl) раскрывается в BOOST_LOG_TRIVIAL(lvl) только в режиме отладки и игнорируется в релизе?
Например:
LOG_MESSAGE( critical ) << "If I read this message we're in debug mode"
edit Моя первая попытка - создать нулевой поток... Я думаю, что компилятор в режиме выпуска оптимизирует его...
#if !defined( NDEBUG )
#include <boost/log/trivial.hpp>
#define LOG_MESSAGE( lvl ) BOOST_LOG_TRIVIAL( lvl )
#else
#if defined( __GNUC__ )
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-value"
#endif
#include <iosfwd>
struct nullstream : public std::ostream {
nullstream() : std::ios(0), std::ostream(0) {}
};
static nullstream g_nullstream;
#define LOG_MESSAGE( lvl ) g_nullstream
#if defined( __GNUC__ )
#pragma GCC diagnostic pop
#endif
#endif