I&#x27;m not familiar with MSVC, but when I tried this example:<p><pre><code>  #include &lt;stdio.h&gt;

  void bar(int n, const char *p[]) {
    for (int i = 0; i &lt; n; i++) {
      printf(&quot;%s\t&quot;, p[i]);
    }
    putchar(&#x27;\n&#x27;);
  }

  #define bar(...) (bar( \
  sizeof((const char*[]) { NULL, __VA_ARGS__ }) &#x2F; sizeof(const char*) - 1, \
  (const char*[]) { NULL, __VA_ARGS__ } + 1))

  int main(&#x2F;* int argc, char **argv *&#x2F;) {
    bar();
    bar(&quot;a&quot;);
    bar(&quot;a&quot;, &quot;b&quot;);
    bar(&quot;a&quot;, &quot;b&quot;, &quot;c&quot;);
    return 0;
  }
</code></pre>
Using the online MSVC compiler at <a href="http:&#x2F;&#x2F;webcompiler.cloudapp.net&#x2F;" rel="nofollow">http:&#x2F;&#x2F;webcompiler.cloudapp.net&#x2F;</a> (which runs Visual C++ 19.00.23720.0), it failed with these error message:<p><pre><code>  Compiled with  &#x2F;EHsc &#x2F;nologo &#x2F;W4 &#x2F;c
  main.cpp
  main.cpp(20): error C4576: a parenthesized type followed by    an 
  initializer list is a non-standard explicit type conversion syntax
  main.cpp(21): error C4576: a parenthesized type followed by an initializer
  list is a non-standard explicit type conversion syntax
  main.cpp(22): error C4576: a parenthesized type followed by an initializer list
  is a non-standard explicit type conversion syntax
  main.cpp(23): error C4576: a parenthesized type followed by an initializer list
  is a non-standard explicit type conversion syntax</code></pre>