My code contains snippets like these:
std::va_list ap;
va_start(ap, msgfmt);
snprintf_buf buf;
const tchar * msg = buf.print_va_list(msgfmt, ap);
One of possible implementations assumes std::va_list = char* and va_end() is just setting that pointer to null. Of cause, it can be called outside of function. But I'm not sure, that it will works similar on other platforms.
Better to wrap this functions with a class.
Unfortunately, no. The specification of va_start
and va_end
requires that:
Each invocation of the
va_start
andva_copy
macros shall be matched by a corresponding invocation of theva_end
macro in the same function.
Therefore, va_end
must be in the variadic function itself, not a class destructor.