https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110866
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |INVALID Status|UNCONFIRMED |RESOLVED --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I think this is not valid C++ code at all. All compilers I tried reject either va_start/va_end or the va_arg. The only portable fix is to do: void f(const char *fmt, ...) { va_wrap va; va_start(static_cast<va_list&>(va), fmt); va.engaged = 1; va_arg(static_cast<va_list&>(va), int); if (0) va_copy(static_cast<va_list&>(va), static_cast<va_list&>(va)); if (0) va_end(static_cast<va_list&>(va)); }