В чем преимущество статического массива перед динамическим?
Насколько мне известно...
Статический массив:
- Размер должен быть известен на момент компиляции. Твой пример - это нестандартная фишка ряда компиляторов, по-хорошему для статического массива размер не должен быть динамическим (определяться во время выполнения).
+ Компилятор сам позаботится об удалении массива.

Динамический массив:
+ Размер может определяться во время выполнения.
- Нужно не забыть освободить память массива самостоятельно.

А вообще, если нет причин делать иначе, используй std::vector. Если тебе понадобится именно массив в стиле C, вектор позволяет его легко получить методом .data().
+ Размер не просто динамический, вектор может переаллоцировать свою память по мере надобности. Так что для ситуаций, когда размер заведомо неизвестен, вектор весьма удобен.
+ Вектор сам управляет своей памятью. Убил вектор - убил управляемый им массив.
В первом случае у вас не статический массив, а локальный. Память для него выделяется на стеке и ограничена размером стека.
Во втором случае выделяется динамический массив. Память под него ограничена свободной памятью системы или предельным размером динамического массива, если такое ограничение есть в системе.