Почему?
#include <iostream>
#include <vector>
#include <array>
void foo(int a)
{
size_t s;
if (a < 1)
s = 100;
else
s = a;
int sa[s]; // ок!
std::cout << sizeof(sa) << std::endl; // размеры разные
//std::array<int, s> a; // ошибка!
}
int main()
{
foo(-1);
foo(10);
return 0;
}