I noticed, that both GCC and MSVC are happy with the following code:
std::cout << "foo\n";
C++ Variadiac arguments are explained here. This syntax is supported in C++, but the arguments are not accessible:
In the C programming language, at least one named parameter must appear before the ellipsis parameter, so
printz(...);is not valid.
In C++, this form is allowed even though the arguments passed to such function are not accessible, and is commonly used as the fallback overload in SFINAE, exploiting the lowest priority of the ellipsis conversion in overload resolution. This syntax for variadic arguments was introduced in 1987 C++ without the comma before the ellipsis. When C89 adopted function prototypes from C++, it replaced the syntax with one requiring the comma. For compatibility, C++98 accepts both C++-style
f(int n...)and C-style
f(int n, ...)