Why is syntax error 'assert(false, "some text")' not discovered by Visual Studio?

Regina Henschel rb.henschel at t-online.de
Wed Sep 19 07:56:05 UTC 2018


Hi,

Tor Lillqvist schrieb am 19-Sep-18 um 08:04:
> But even if assert(e) expands to nothing, the compiler should report an
> error if you pass two arguments to the assert macro that takes just one.
> At least Clang on macOS and gcc on Linux do:
>
> assert.cpp:5:17: error: too many arguments provided to function-like
> macro invocation
>   assert(false, "sdsdf");
>
> and
>
> assert.cpp:5:24: error: macro "assert" passed 2 arguments, but takes just 1
>    assert(false, "sdsdf");
>
> In the NDEBUG case, where assert is defined as:
>
> #define assert(e)       ((void)0)
>
> and
>
> # define assert(expr)           (__ASSERT_VOID_CAST (0))
>
> Regina, try adding some very obvious syntax error, some foo bar zap,
> after the assert(false, "Standard layer may not be deleted.");, to see
> if that line even is compiled.

The line
assert(false, "Standard layer may not be deleted.")+1;
produces an error.

And I have seen now in an isolated 'make sd.build', that the line
assert(false, "Standard layer may not be deleted.");
produces a
warning C4002: too many arguments for function-like macro invocation 
'assert'

It is likely that I have not noticed the warning in the jumble of output 
of a full build.

Nevertheless, it is corrected and I hope Jenkins will success now.

Thanks for your help.
Regina


More information about the LibreOffice mailing list