次のコードは私には問題ないように見えます。
#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が出力されることに注意してください)。
テンプレートを削除することはオプションではないことに注意してください。この例は、配列を含む型をテンプレートにする必要があるコードで発生している問題を再現するために作成しました。
ありがとう