Skip to content

Conversation

@cyrilcourvoisier
Copy link

On Visual Studio 2022 compiler, the macro expansion of DLOG_IF_F fails for some reasons. VA_ARGS is expanded into 'cond' variable of the VLOG_IF macro and : loguru::log() only got three arguments.

#define VLOG_IF_F(verbosity, cond, ...)
((verbosity) > loguru::current_verbosity_cutoff() || (cond) == false)
? (void)0
: loguru::log(verbosity, FILE, LINE, VA_ARGS)

I have added 'cond' parameter to DLOG_IF_F and DVLOG_IF_F so the signature maps correctly with VLOG_IF_F and it fixes the problem.

@abdes
Copy link

abdes commented Dec 28, 2024

The expansion of the forwarded arguments is actually a general problem, and because you know the next one is the condition, you solved it by specifying that argument separately. However, I think it should simply stay blind and force expansion of the argument using an extra layer of expansion:

#    define EXPAND(x) x

#    define DLOG_F(verbosity_name, ...) EXPAND(LOG_F(verbosity_name, __VA_ARGS__))
#    define DVLOG_F(verbosity, ...) EXPAND(VLOG_F(verbosity, __VA_ARGS__))
#    define DLOG_IF_F(verbosity_name, ...) EXPAND(LOG_IF_F(verbosity_name, __VA_ARGS__))
#    define DVLOG_IF_F(verbosity, ...) EXPAND(VLOG_IF_F(verbosity, __VA_ARGS__))
#    define DRAW_LOG_F(verbosity_name, ...) EXPAND(RAW_LOG_F(verbosity_name, __VA_ARGS__))
#    define DRAW_VLOG_F(verbosity, ...) EXPAND(RAW_VLOG_F(verbosity, __VA_ARGS__))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants