title: Are Variadic macros nonstandard?
body: <p>For debugbuilds, I usually use Clang, as it formats warnings and errors better, and makes it a little easier to track them down, and fix them.</p>
  
  <p>But recently after adding a Macro with variadic arguments, Clang told me the following (from a dummy project):</p>
  
  <pre><code>main.cpp:5:20: warning: named variadic macros are a GNU extension [-Wvariadic-macros]
  #define stuff3(args...)  stuff_i(args)
  </code></pre>
  
  <p>I know that <code>macroname(args...)</code> compiles fine in a wide range of compilers, including Visualstudio, Sunstudio, and of course GCC. But just to make sure that clang is right, I tried two other ways of expanding the variadic arguments:</p>
  
  <p>Number 1:</p>
  
  <pre><code>#define stuff1(...)  stuff_i(...)
  </code></pre>
  
  <p>Number 2: </p>
  
  <pre><code>#define stuff2(...)  stuff_i(__VA_ARGS__)
  </code></pre>
  
  <p>On both I receive this message:</p>
  
  <pre><code>main.cpp:3:16: warning: variadic macros were introduced in C99 [-Wvariadic-macros]
  </code></pre>
  
  <p>... Which makes me wonder if Variadic macros are actually part of the standard of C++ (and of course I know that the Preprocessor is interpreted independently)?</p>