Está haciendo una especialización de plantilla de función virtual legal?

En C ++, se supone que una especialización de plantilla de función actúa exactamente como una función normal. ¿Eso significa que puedo hacer uno virtual?

Por ejemplo

struct A
{
    template <class T> void f();
    template <> virtual void f<int>() {}
};

struct B : A
{
    template <class T> void f();
    template <> virtual void f<int>() {}
};

int main(int argc, char* argv[])
{
    B b;
    A& a = b;
    a.f<int>();
}

Visual Studio 2005 me da el siguiente error:

error fatal C1001: se ha producido un error interno en el compilador.

Respuestas a la pregunta(3)

Su respuesta a la pregunta