Вы не можете пересылать va_args.Вы можете пересылать только va_list.
void vB(int first, va_list ap)
{
// do stuff with ap.
}
void B(int first, ...)
{
va_list ap;
va_start(ap, first);
vB(first, ap);
va_end(ap);
}
void A(int something_else, int first, ...)
{
va_list ap;
va_start(ap, first);
vB(first, ap); // <-- call vB instead of B.
va_end(ap);
}
(по этой же причине существуют такие функции, как vprintf
.)
Если вы используете C ++ 11, вы можете сделать этос вариадическими шаблонами с идеальной пересылкой:
template <typename... T>
void A(T&&... args)
{
B(std::forward<T>(args)...);
}