すみません、>>679のコードでは再現できませんでした。
再現するための最小のコードを訂正として乗せます。

class C
{
public:
   static const intwidth=64;
   static const intheight=64;

   struct S
   {
      float height[C::height][C::width];//この行と下の行の順番を入れ替えるとなぜかコンパイルできる
      intdata[C::height][C::width];//
   }
};

heightの名前がかぶっているのが直接の原因だと思いますが、
別の名前空間に存在するはずなんです・・・
私が悪いのか、コンパイラが悪いのか。教えてください。