Some of this missing functionality has been "emulated" to a reasonable degree in the standard library for some time though (e.g. variadic templates), which at least allowed you to start writing client code in a way that will leverage the proper features when they are added in.
This feature gave rise to my favourite quote from the MSDN:
"Therefore, we reduced infinity. In Visual C++ 2008 SP1 and Visual C++ 2010, infinity was 10 (that is, "variadic" templates supported 0 to 10 arguments, inclusive). By default, infinity is 5 in Visual C++ in Visual Studio 2012."
EDIT: Infinity is 10... no, it's 5... for small values of infinity.
Yes, that's a good one. IIRC, in 2012 at least, the value of 'Infinity' can at least be redefined if you need (although it's not 'supported', its supposed to work for reasonably large values of 'Infinity'). It has a default that's fairly small, I think, but its more about compile-time performance than the capabilities of the template magic going on behind the scenes. I'm pretty sure you can go higher than 10 in VS2012, as long as you can live with the compile times.
The situation is less than optimal, but for most client code 'Infinity' in a range of 5-10 is alright. In general, the people who really need *real* variadic templates or even 'Infinities' larger than 5-10 are library writers and maintainers, not library users. It could be better, but the work around at least satisfies the 80/20 rule.