I'm going to be Contrarian here, but...
Variable lists of parameters is one of the most ill-conceived and poorly executed notions in c.
Overloaded operators is one of the most ill-conceived and poorly executed notions in c++.
They both undermind the notion of a strongly-typed language and make for code that is hard to understand and hard to maintain. There is a reason that subsequent languages have abandonned them.
There's nothing unreasonable about a) using functions to perform the job of functions, rather than operators and format strings; and b) calling a function once for every time you need to use it. Saving keystrokes costs you time in the long run.