2

I have a C++ application where I am using zero-arguments-variadic macros. However, I don't really like the standard conforming solution posted here on SO in various answers, but rather keep the GCC specific ##__VAR_ARGS__.

I'd like to catch as much warnings as possible though.

My build system is meson and I passed the options --buildtype=debugoptimized --warning_level=2 --werror=true and specify -Wno-pedantic as an addtional project argument.

Ob Ubuntu 18.04, gcc 7.3.0, meson 0.45.1 this adds the following options to the compiler: -Wall -Wextra -Werror -Wpedantic -Wno-pedantic -std=c++11 and everything builds fine.

The same code, the same options on CentOS 7.4.1708, gcc 4.8.5, meson 0.44.1 adds extactly the same options to the compiler but does not compile and I get the following error:

ISO C99 requires rest arguments to be used (for the variadic macros)

It seems that -Wno-pedantic is ignored in this compiler.

I can play around with the warning options a bit, but either on Ubuntu or CentOS the build is failing. When the Ubuntu build fails, the error message is a bit different:

ISO C++11 requires at least one argument for the "..." in a variadic macro

The only solution to make both builds succeed I found so far is using meson --buildtype=plain --warning_level=1 -werror=true and setting -Wall -Wextra as project arguments.

So I'm not sure if this is a compiler issue, a meson issue or just some unfortunate version difference I'm hitting.

flowit
  • 1,382
  • 1
  • 10
  • 36
  • 1
    You could dodge all this mess and conditionally set flags depending on the gcc version – bolov Jun 20 '18 at 19:32
  • Have you tried std=gnu++11? – eerorika Jun 20 '18 at 19:33
  • @bolov I don't want to work around the issue but fix it. I consider adding version checks a dirty hack which gets even dirtier when other compilers (clang) and other targets come into play. – flowit Jun 21 '18 at 19:49

0 Answers0