------- Comment #8 from vz-gcc at zeitlins dot org 2010-03-17 20:05 ------- Sorry for a late follow up but I've just discovered that this change broke compilation of code using wxWidgets library with "-pedantic-errors -std=c++98" switches because wxWidgets uses constructions such as (simplified):
#define wxEMPTY_PARAMETER_VALUE /* Fake macro parameter value */ /* This will be __declspec(dllexport) for some compilers, __attribute__ ((visibility("default"))) for other ones and empty in non-shared library build */ #define wxEXPORT ... #define wxDECLARE_SOMETHING(expdecl, name) class expdecl name #define wxDECLARE_EXPORTED_SOMETHING(name) wxDECLARE_SOMETHING(wxEXPORT, name) And now, with g++ 4.4.3 from Debian Unstable, this results in "empty macro arguments are undefined in ISO C90 and ISO C++98" warning/error when wxEXPORT is empty. Admittedly, the error may be correct (although to be honest I am not even 100% sure it is even after rereading 16.3 and 16.3.1 of C++98 several times), but this use is common and often occurs in other code. Even Boost defines BOOST_PP_EMPTY in its boost/preprocessor/facilities/empty.hpp and I definitely saw this many times in other code as well so at the very least there is a widespread belief in C++ community that such usage is valid. So ideally I'd like to see gcc behave more leniently when a macro which expands to an empty value is passed to another macro as argument (as opposed to directly omitting a macro argument). Failing that, it'd be nice to have a specific option to turn this behaviour off. Because right now the only choice seems to be to either disable -pedantic (which would be a really unfortunate consequence of the change making gcc stricter) or use -std=c++0x which is more acceptable but still not always desirable. TIA! -- vz-gcc at zeitlins dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |vz-gcc at zeitlins dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33305