一个恼人的c++数组有关问题

一个恼人的c++数组问题
代码一:
const int x=5;
int num[x];
代码二:
int x=5;
int num[x];

代码一能够在gcc, vc6.0, vs2010上编译通过。
代码二能够在gcc上通过,而在vc6.0,vs2010上通不过。

我的问题是:
这是c++标准的问题,还是gcc自己的问题?
是因为vc6.0,vs2010的c++标准太老了,还是因为gcc自己搞了个标准?

很急,求解!
c++标准 数组

------解决方案--------------------
vs2010也不通过。变量x的值在编译阶段不确定,无法分配内存,只有new动态分配了
int *num = new int[x];
------解决方案--------------------
这个貌似是c99的标准,微软的编译器似乎都没有支持这个特性呢,gcc是支持的。
------解决方案--------------------
int x=5;
int num[x];

C语言有VLA 如果编译器支持 可以这样做 

C++不可以
C99之前的不可以

------解决方案--------------------
引用:
代码一:
const int x=5;
int num[x];
代码二:
int x=5;
int num[x];

代码一能够在gcc, vc6.0, vs2010上编译通过。
代码二能够在gcc上通过,而在vc6.0,vs2010上通不过。

我的问题是:
这是c++标准的问题,还是gcc自己的问题?
是因为vc6.0,vs2010的c++标准……

代码一能通过是因为x被定义为常量,用常量声明数组正确。代码二x是变量,用变量声明数组不被允许也很正常,就被算允许这样做还是不这样用为好。这么我觉得不必太多纠结。