Conceptually, asserting these at the start was right.  You're now asserting after a va_start() and a va_copy(), which has set up two things that should be torn down properly, which they won't after an assert failure.  Not that this matters in practice, but there is no win to moving the asserts later !