C2070 - недопустимый размер операнда

Следующий код выглядит хорошо для меня:

    #include <stdio.h>

    template <typename T>
    struct A
    {
        static float m_kA[];
    };

    template <typename T>
    float A<T>::m_kA[] = {1.0f, 2.0f, 3.0f};

    int main()
    {
        printf("%d\n", 
            sizeof(A<unsigned int>::m_kA) /
            sizeof(A<unsigned int>::m_kA[0]));
        return 0;
    }

Но когда я компилирую с VC9, я получаю следующую ошибку

error C2070: 'float []': illegal sizeof operand

Я ожидаю, что этот код скомпилируется. Я что-то пропустил? Кто-нибудь знает способ исправить это странное поведение (обратите внимание, что то же самое без шаблона компилируется нормально и выводит 3).

Обратите внимание, что удаление шаблона не является вариантом, я сделал этот пример, чтобы воспроизвести проблему, с которой я сталкиваюсь в коде, где мне нужно, чтобы тип, содержащий массив, был шаблоном.

Спасибо

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

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