Cita: El estándar dice que para reservar memoria estática necesitas un valor constante y en este caso usa un valor variable por lo que eso no es estándar y en mi c++Builder ni compila.
Con respecto a poder declarar donde quiera, en C el estándar dice que tiene que ser al inicio de la función y no en cualquier parte. En c++ si que se puede en cualquier parte.
A partir del estándar c99 ambas cosas se pueden hacer, en anteriores no, si tienes compiladores más antiguos no podrás hacerlo pero si utilizas compiladores más nuevos podrás hacerlo sin problema.