Законно ли делать специализацию шаблона функции виртуальной?

В C ++ специализация шаблона функции должна действовать точно так же, как нормальная функция. Значит ли это, что я могу сделать один виртуальный?

Например:

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 дает мне следующую ошибку:

фатальная ошибка C1001: в компиляторе произошла внутренняя ошибка.

Ответы на вопрос(3)

Ваш ответ на вопрос