To be exact, this is the compile time of the variadic function itself,
like printf() in the C runtime library.
On the other hand, every time one calls printf(), the compiler exactly
knows the number and types of the parameters you are passing.
Variadic functions are used to mimick function overloading in C. It is in
some sense more powerful as C++ function overloading as it handles well
the exponential explosion of argument type combinations. For implementing
something similar in C++ one needs to process arguments one-by-one, by
using overloaded functions repeatedly, or maybe one can use some heavy
template trickery instead.
Type safety. The arguments passed via ellipses totally bypass the
language type system and rely only on the user code to avoid UB. This can
be easily broken, e.g. when size_t changes from 32 to 64 bits.
As a consequence, no attempt was made to support proper C++ objects (non-
POD-s) in variadic functions, as the feature was totally broken anyway.
Thus in C++ the feature is also incomplete in that one cannot pass non-
POD objects.
If the R language manages to avoid the type safety and incompleteness
problems, then the feature is fine. If the object types are known at run-
time, it would be easy to check them or apply needed conversions.
I don't think that the R language manages to avoid the type safety and
incompleteness problems. According to my limited knowledge in R, R is
more similar to python in the sense that if the users what to check
the type they can do it but it is not mandatory.
As mentioned in
http://bytes.com/topic/python/answers/676651-function-parameter-type-safety,
"Long story short: checking parameter types is un-Pythonic. Don't do
it."
Although type check is a strong point of C++, it not necessary widely
used in other languages. I want to understand the principle in
different aspects (include type safety). I checked the book
Programming Language Pragmatics by Michael L. Scott (2nd edition).
This is a pretty thick book. Could somebody let know if this book
would help me on understanding the different choices made in different
languages? If yes, what particular part of the book might help me
understand the reasons of the choices (in particular, the difference
between type safety, in C++, python, perl, R)?