不動小数点数がコンパイル時定数である必要性が無いからかな

struct X {
static const int i = 100; // OK
static const float pi;
};

const float X::pi = 3.14f; //OK

これでいいだろ。: