Actually, the language doesn't require that. Your compiler is not using the current C++ rules.
12.6.2p8 says (boldface mine for emphasis):
[ Note: An abstract class is never a most derived class, thus its constructors never initialize virtual base classes, therefore the corresponding mem-initializers may be omitted. — end note ]
I can't find that rule in C++03, so this is a recognized flaw in C++ that has since been fixed. Look for a compiler update that supports C++11.
The closest related rule in C++03 I can find was in section 12.6.2p6:
A mem-initializer naming a virtual base class shall be ignored during execution of the constructor of any class that is not the most derived class.