Thanks for the thoughtful and comprehensive reply.
I realize and understand that C99 is not a C++ standard and that VC++'s priority is C++ support. Of course, my priorities are different. I shouldn't claim that VC++ is bad for everybody, but it is bad for me.
Speaking of VLAs specifically, they have been broken in GCC until very recently
It is true VLAs are/were 'broken' in GCC in the sense that they are not fully C99 conformant. That has been documented in the info pages for a long time. However, speaking practically, for the simple declarations I have used, I have never had a problem. Perhaps I ought to double-check that :P
it's simply non-portable in practice
I agree that non-portability across compilers would be a problem, except that of course GCC itself is so incredibly portable, and is also the preferred compiler on many non-Windows platforms.
FWIW, I am not a C99 stickler -- I only care about the parts of it that I use, and I specifically don't worry about free-form variable declarations because there is an easy fix -- declare your variables only after a block begins.
VLAs have no "easy fix" -- the closest alternative is alloca(), which my manpage claims is "buggy" on many unspecified systems, and of course, it's not really portable or standard either. Using malloc() is slower, uglier (since if you're doing it right you'll want to check the return value), and has the potential to fragment your memory.
I apologize if these points have already been debated to death in the flamewars -- I don't read that group. I also expect you are already aware of these points and were simply trying to make yours, in which case, this was a superfluous post. Oh well :P