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

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

    #include 

    template 
    struct A
    {
        static float m_kA[];
    };

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

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

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

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

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

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

Спасибо

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

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