https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65547
--- Comment #8 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Edward Diener from comment #7) > So the GNU extension in this case is that the programmer does not have to > pass an argument when a variadic parameter is used in a macro ? Yes, as documented at https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Variadic-Macros.html > That would > not even bother me if there were a compiler flag which allowed it. But you > appear to be telling me that this non-C++ is by default. Yes, did you read the link I gave explaining the semantics of -pedantic? > OK, how do I tell > gcc to actually follow the C++ standard ? Do I pass '-pedantic' for that ? Yes, as I already said in comment 5, in the text you quoted. And to make it an error not a warning use -pedantic-errors. > I realize gcc is used by many programmers and is loath to change the way it > has done things so as not to upset long-time users of the compiler. > Nonetheless I am going to suggest that the default should always be > conformance to the C++ standard, and that GNU extensions should be turned on > with some compiler option. As it states in the manual (again, see the link in comment 5), if you write valid ISO C++ programs using variadic macros then you will never notice this extension. Your valid uses are accepted as required, and as an extension some invalid ones are also silently accepted unless you use -pedantic. This is consistent, well-documented, and what many users expect and prefer. If you prefer something different, there's an option for that.